Build surface fuel grids from LANDFIRE
You are viewing in-progress documentation for v2 (Beta). Switch to the stable version for the current production release.
LANDFIRE supplies several categorical descriptions of surface fuels. FastFuels fetches the classification for your domain, then uses that product’s lookup table to produce the continuous load, depth, and surface-area-to-volume bands your workflow needs. Every product follows the same two-step pattern: fetch a classification grid, then run a lookup against it.

A categorical FBFM40 cell stores a fuel-model code. The lookup replaces
that code with the physical parameter assigned to the model; this example
shows fuel_load.1hr in kg/m². Reusing the classification lets you
request other parameters without fetching LANDFIRE again.
Choose a LANDFIRE product
Section titled “Choose a LANDFIRE product”| Product | Use it when you need | Categorical band | Representative lookup output |
|---|---|---|---|
| Annual FBFM40 | Scott and Burgan’s 40 fire-behavior fuel models for a landscape vintage | fbfm | Dead timelag and live herbaceous/woody loads, SAVR, fuel depth |
| Seasonal FBFM40 | A published seasonal condition layer rather than the annual FBFM40 baseline | fbfm | The same FBFM40 parameter vocabulary |
| FBFM13 | Anderson’s 13 fire-behavior fuel models | fbfm13 | Dead timelag and live foliage loads, SAVR, fuel depth |
| FCCS | Fuelbeds with litter, duff, shrub, herb, and woody components | fccs | Litter and duff loads, duff depth, live and dead loads |
These products classify the landscape under different systems. Their numeric codes are identifiers within each system, not interchangeable fuel-load values.

FBFM40, FBFM13, and FCCS over the same 1.5 km square. Each panel has its own legend because a code only has meaning within its classification system. The product versions are shown in the panel titles.
Each product is available at one or more LANDFIRE landscape vintages. Some
vintages are served from pre-built national rasters and return quickly; the
current-year vintage is fetched on demand from the LANDFIRE Product Service
(LFPS) and takes longer, with coverage that varies by region. Not every
product has every vintage — FCCS, for instance, has one pre-built vintage
(2023) and the on-demand 2025. The
coverage check at the end of this
guide shows how to see exactly which versions and seasons are available for
your domain.
Prerequisites
Section titled “Prerequisites”-
An API key: my-api-key.
-
A domain within LANDFIRE coverage: your-domain-id. See Create a domain.
Build an annual FBFM40 grid
Section titled “Build an annual FBFM40 grid”Fetch the classification
Section titled “Fetch the classification”curl -X 'POST' \ 'https://api-v2-prod-782971006568.us-west1.run.app/domains/your-domain-id/grids/fbfm40/landfire' \ -H 'accept: application/json' \ -H 'api-key: my-api-key' \ -H 'Content-Type: application/json' \ -d '{ "name": "Annual FBFM40 — LF2024", "version": "2024"}'import fastfuels_sdk.v2 as fffrom fastfuels_sdk.v2.client_library.models import LandfireFbfm40Version
ff.set_api_key("my-api-key")
domain = ff.Domain.from_id("your-domain-id")
annual = ff.grids.create_fuel_model_grid_from_landfire_fbfm40( domain, version=LandfireFbfm40Version("2024"), name="Annual FBFM40 — LF2024",){ "id": "your-fbfm40-grid-id", "domain_id": "your-domain-id", "name": "Annual FBFM40 — LF2024", "description": "", "status": "pending", "progress": null, "created_on": "2026-08-24T22:39:21.249801", "modified_on": "2026-08-24T22:39:21.249801", "checksum": "0917d07ab25b4a978727fa2ed059665f", "source": { "name": "landfire", "product": "fbfm40", "version": "2024", "description": "LANDFIRE FBFM40 fuel model codes (Scott-Burgan 40 classification)", "extent_buffer_cells": 0, "alignment": { "target": "domain", "resolution": null, "method": null }, "remove_non_burnable": null, "season": null, "year": 2024 }, "modifications": [], "bands": [ { "key": "fbfm", "name": "Scott & Burgan 40 Fuel Model", "description": "Scott & Burgan 40 fire behavior fuel model code (e.g. GR1, TL3, SH5). Convert to fuel parameters via /grids/lookup/fbfm40.", "type": "categorical", "unit": null, "index": 0, "nodata": null, "summary": null } ], "georeference": null, "error": null, "chunks": { "shape": [512, 512], "count": null, "count_by_axis": null }, "tags": []}version is the LANDFIRE landscape vintage — the snapshot of the landscape
that LANDFIRE modeled. The response reports the calendar year the data
represents as source.year; for an annual grid the two match. This example
requests LF2024, a pre-built vintage that returns quickly. Record the id as
your-fbfm40-grid-id. Set your-grid-id to that value when
polling:
Set remove_non_burnable: true in the fetch request when non-burnable FBFM40
classes should become nodata rather than remain classification codes.
Poll until completed:
curl -X 'GET' \ 'https://api-v2-prod-782971006568.us-west1.run.app/domains/your-domain-id/grids/your-grid-id' \ -H 'accept: application/json' \ -H 'api-key: my-api-key'annual.wait(){ "id": "your-fbfm40-grid-id", "domain_id": "your-domain-id", "name": "Annual FBFM40 — LF2024", "description": "", "status": "completed", "progress": { "percent": 100, "message": "Complete" }, "created_on": "2026-08-24T22:39:21.249801Z", "modified_on": "2026-08-24T22:39:54.254271Z", "checksum": "0917d07ab25b4a978727fa2ed059665f", "source": { "description": "LANDFIRE FBFM40 fuel model codes (Scott-Burgan 40 classification)", "version": "2024", "extent_buffer_cells": 0, "remove_non_burnable": null, "name": "landfire", "season": null, "year": 2024, "alignment": { "method": null, "resolution": null, "target": "domain" }, "product": "fbfm40" }, "modifications": [], "bands": [ { "key": "fbfm", "name": "Scott & Burgan 40 Fuel Model", "description": "Scott & Burgan 40 fire behavior fuel model code (e.g. GR1, TL3, SH5). Convert to fuel parameters via /grids/lookup/fbfm40.", "type": "categorical", "unit": null, "index": 0, "nodata": 32767, "summary": { "type": "categorical", "count": 11227, "nodata_count": 0, "unique_count": 17 } } ], "georeference": { "crs": "EPSG:32613", "transform": [ 29.92571976224661, 0.0, 416700.0, 0.0, -29.925719762248104, 3948562.3491355116 ], "shape": [103, 109] }, "error": null, "chunks": { "shape": [512, 512], "count": 1, "count_by_axis": { "x": 1, "y": 1 } }, "tags": []}Translate the codes into physical parameters
Section titled “Translate the codes into physical parameters”Point the lookup at the completed FBFM grid. source_band is the band
holding the codes (fbfm), and bands is the list of parameters to compute.
curl -X 'POST' \ 'https://api-v2-prod-782971006568.us-west1.run.app/domains/your-domain-id/grids/lookup/fbfm40' \ -H 'accept: application/json' \ -H 'api-key: my-api-key' \ -H 'Content-Type: application/json' \ -d '{ "name": "Annual FBFM40 surface parameters", "source_grid_id": "your-fbfm40-grid-id", "source_band": "fbfm", "bands": [ "fuel_load.1hr", "fuel_load.10hr", "fuel_load.100hr", "fuel_load.live_herb", "fuel_load.live_woody", "fuel_depth" ]}'annual_fuel = ff.grids.create_fuel_grid_from_fbfm40_lookup( annual, bands=[ "fuel_load.1hr", "fuel_load.10hr", "fuel_load.100hr", "fuel_load.live_herb", "fuel_load.live_woody", "fuel_depth", ], name="Annual FBFM40 surface parameters",)annual_fuel.wait(){ "id": "your-lookup-grid-id", "domain_id": "your-domain-id", "name": "Annual FBFM40 surface parameters", "description": "", "status": "pending", "progress": null, "created_on": "2026-08-24T22:40:44.648414", "modified_on": "2026-08-24T22:40:44.648414", "checksum": "401c1e67aeb94c68bb77ffb6ce4e9451", "source": { "name": "lookup", "table": "fbfm40", "source_grid_id": "your-fbfm40-grid-id", "source_grid_checksum": "0917d07ab25b4a978727fa2ed059665f", "source_band": "fbfm" }, "modifications": [], "bands": [ { "key": "fuel_load.1hr", "name": "1-hour Fuel Load", "description": "Oven-dry mass per unit area of 1-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 0, "nodata": null, "summary": null }, { "key": "fuel_load.10hr", "name": "10-hour Fuel Load", "description": "Oven-dry mass per unit area of 10-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 1, "nodata": null, "summary": null }, { "key": "fuel_load.100hr", "name": "100-hour Fuel Load", "description": "Oven-dry mass per unit area of 100-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 2, "nodata": null, "summary": null }, { "key": "fuel_load.live_herb", "name": "Live Herbaceous Fuel Load", "description": "Oven-dry mass per unit area of live herbaceous fuels.", "type": "continuous", "unit": "kg/m**2", "index": 3, "nodata": null, "summary": null }, { "key": "fuel_load.live_woody", "name": "Live Woody Fuel Load", "description": "Oven-dry mass per unit area of live woody fuels.", "type": "continuous", "unit": "kg/m**2", "index": 4, "nodata": null, "summary": null }, { "key": "fuel_depth", "name": "Fuel Bed Depth", "description": "Vertical depth of the surface fuel bed.", "type": "continuous", "unit": "m", "index": 5, "nodata": null, "summary": null } ], "georeference": { "crs": "EPSG:32613", "transform": [ 29.92571976224661, 0.0, 416700.0, 0.0, -29.925719762248104, 3948562.3491355116 ], "shape": [103, 109] }, "error": null, "chunks": { "shape": [512, 512], "count": null, "count_by_axis": null }, "tags": []}Record this id as your-lookup-grid-id and poll it to completed.
The output bands are continuous and carry their units:
{ "id": "your-lookup-grid-id", "domain_id": "your-domain-id", "name": "Annual FBFM40 surface parameters", "description": "", "status": "completed", "progress": { "percent": 100, "message": "Complete" }, "created_on": "2026-08-24T22:40:44.648414Z", "modified_on": "2026-08-24T22:40:47.344970Z", "checksum": "401c1e67aeb94c68bb77ffb6ce4e9451", "source": { "source_grid_id": "your-fbfm40-grid-id", "source_grid_checksum": "0917d07ab25b4a978727fa2ed059665f", "source_band": "fbfm", "name": "lookup", "table": "fbfm40" }, "modifications": [], "bands": [ { "key": "fuel_load.1hr", "name": "1-hour Fuel Load", "description": "Oven-dry mass per unit area of 1-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 0, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 1.3001821041107178, "mean": 0.28268456370417544, "std": 0.2866704442804344 } }, { "key": "fuel_load.10hr", "name": "10-hour Fuel Load", "description": "Oven-dry mass per unit area of 10-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 1, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 1.1880974769592285, "mean": 0.4447985170375072, "std": 0.4233805556614999 } }, { "key": "fuel_load.100hr", "name": "100-hour Fuel Load", "description": "Oven-dry mass per unit area of 100-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 2, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 0.9863450527191162, "mean": 0.36682045139877373, "std": 0.3905496454864779 } }, { "key": "fuel_load.live_herb", "name": "Live Herbaceous Fuel Load", "description": "Oven-dry mass per unit area of live herbaceous fuels.", "type": "continuous", "unit": "kg/m**2", "index": 3, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 0.22416932880878448, "mean": 0.04757333884200335, "std": 0.06454520602446025 } }, { "key": "fuel_load.live_woody", "name": "Live Woody Fuel Load", "description": "Oven-dry mass per unit area of live woody fuels.", "type": "continuous", "unit": "kg/m**2", "index": 4, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 0.8630518913269043, "mean": 0.23526099223586802, "std": 0.2852485708917369 } }, { "key": "fuel_depth", "name": "Fuel Bed Depth", "description": "Vertical depth of the surface fuel bed.", "type": "continuous", "unit": "m", "index": 5, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 1.8287999629974365, "mean": 0.5720015678488742, "std": 0.6444623598459112 } } ], "georeference": { "crs": "EPSG:32613", "transform": [ 29.92571976224661, 0.0, 416700.0, 0.0, -29.925719762248104, 3948562.3491355116 ], "shape": [103, 109] }, "error": null, "chunks": { "shape": [512, 512], "count": 1, "count_by_axis": { "x": 1, "y": 1 } }, "tags": []}This is the finished annual surface-fuel grid: every cell’s FBFM40 code is mapped to the requested load, depth, or SAVR values.
Build a seasonal FBFM40 grid
Section titled “Build a seasonal FBFM40 grid”A seasonal request adds season to FBFM40. version remains the landscape
vintage, but source.year now reflects the calendar year the seasonal layer
represents — typically one year ahead of the vintage. In this example,
version: "2025" with season: "SU" returns year: 2026 because the data
describes summer 2026 conditions. Seasonal layers are always fetched on demand
from LFPS, so they take longer than a pre-built annual request and their
availability depends on which regions and seasons LANDFIRE has published.

Annual LF2024 and summer LF2025 SU26 over their common extent. Both are FBFM40 classifications and therefore share a legend. In this live example, 47.9% of cells in the common footprint have different codes.
Fetch the summer classification
Section titled “Fetch the summer classification”The alignment object uses the annual grid as the target. Keep the two source grid ids separate: the lookup must point to the classification whose conditions you want.
curl -X 'POST' \ 'https://api-v2-prod-782971006568.us-west1.run.app/domains/your-domain-id/grids/fbfm40/landfire' \ -H 'accept: application/json' \ -H 'api-key: my-api-key' \ -H 'Content-Type: application/json' \ -d '{ "name": "Summer 2026 FBFM40 — LF2025 SU26", "version": "2025", "season": "SU", "alignment": { "target": "grid", "grid_id": "your-fbfm40-grid-id" }}'from fastfuels_sdk.v2.client_library.models import ( LandfireFbfm40Version, LandfireSeason,)
# A seasonal FBFM40 adds `season`; align it to the annual grid for comparison.summer = ff.grids.create_fuel_model_grid_from_landfire_fbfm40( domain, version=LandfireFbfm40Version("2025"), season=LandfireSeason.SU, align_to=annual, name="Summer 2026 FBFM40 — LF2025 SU26",)summer.wait(){ "id": "your-seasonal-fbfm40-grid-id", "domain_id": "your-domain-id", "name": "Summer 2026 FBFM40 — LF2025 SU26", "description": "", "status": "pending", "progress": null, "created_on": "2026-08-24T22:39:55.303700", "modified_on": "2026-08-24T22:39:55.303700", "checksum": "58a6416be7654925861ea545525d85ac", "source": { "name": "landfire", "product": "fbfm40", "version": "2025", "description": "LANDFIRE FBFM40 fuel model codes (Scott-Burgan 40 classification)", "extent_buffer_cells": 0, "alignment": { "target": "grid", "grid_id": "your-fbfm40-grid-id", "resolution": null, "method": null }, "remove_non_burnable": null, "season": "SU", "year": 2026 }, "modifications": [], "bands": [ { "key": "fbfm", "name": "Scott & Burgan 40 Fuel Model", "description": "Scott & Burgan 40 fire behavior fuel model code (e.g. GR1, TL3, SH5). Convert to fuel parameters via /grids/lookup/fbfm40.", "type": "categorical", "unit": null, "index": 0, "nodata": null, "summary": null } ], "georeference": null, "error": null, "chunks": { "shape": [512, 512], "count": null, "count_by_axis": null }, "tags": []}{ "id": "your-seasonal-fbfm40-grid-id", "domain_id": "your-domain-id", "name": "Summer 2026 FBFM40 — LF2025 SU26", "description": "", "status": "completed", "progress": { "percent": 100, "message": "Complete" }, "created_on": "2026-08-24T22:39:55.303700Z", "modified_on": "2026-08-24T22:40:43.182448Z", "checksum": "58a6416be7654925861ea545525d85ac", "source": { "description": "LANDFIRE FBFM40 fuel model codes (Scott-Burgan 40 classification)", "version": "2025", "extent_buffer_cells": 0, "remove_non_burnable": null, "name": "landfire", "season": "SU", "year": 2026, "alignment": { "method": null, "grid_id": "your-fbfm40-grid-id", "resolution": null, "target": "grid" }, "product": "fbfm40" }, "modifications": [], "bands": [ { "key": "fbfm", "name": "Scott & Burgan 40 Fuel Model", "description": "Scott & Burgan 40 fire behavior fuel model code (e.g. GR1, TL3, SH5). Convert to fuel parameters via /grids/lookup/fbfm40.", "type": "categorical", "unit": null, "index": 0, "nodata": -9999, "summary": { "type": "categorical", "count": 11336, "nodata_count": 0, "unique_count": 18 } } ], "georeference": { "crs": "EPSG:32613", "transform": [ 29.92571976224661, 0.0, 416700.0, 0.0, -29.925719762247844, 3948592.274855274 ], "shape": [104, 109] }, "error": null, "chunks": { "shape": [512, 512], "count": 1, "count_by_axis": { "x": 1, "y": 1 } }, "tags": []}Record the id as your-seasonal-fbfm40-grid-id. Inspect the completed
grid’s georeference before cell-by-cell comparison; product coverage can add
or omit an edge row even when an alignment target is supplied.
Look up the summer parameters
Section titled “Look up the summer parameters”The lookup endpoint and band vocabulary do not change. Only source_grid_id
changes to the seasonal classification.
curl -X 'POST' \ 'https://api-v2-prod-782971006568.us-west1.run.app/domains/your-domain-id/grids/lookup/fbfm40' \ -H 'accept: application/json' \ -H 'api-key: my-api-key' \ -H 'Content-Type: application/json' \ -d '{ "name": "Summer 2026 FBFM40 surface parameters", "source_grid_id": "your-seasonal-fbfm40-grid-id", "source_band": "fbfm", "bands": [ "fuel_load.1hr", "fuel_load.live_herb", "fuel_load.live_woody", "fuel_depth" ]}'summer_fuel = ff.grids.create_fuel_grid_from_fbfm40_lookup( summer, bands=[ "fuel_load.1hr", "fuel_load.live_herb", "fuel_load.live_woody", "fuel_depth", ], name="Summer 2026 FBFM40 surface parameters",)summer_fuel.wait(){ "id": "your-seasonal-lookup-grid-id", "domain_id": "your-domain-id", "name": "Summer 2026 FBFM40 surface parameters", "description": "", "status": "pending", "progress": null, "created_on": "2026-08-24T22:40:49.559247", "modified_on": "2026-08-24T22:40:49.559247", "checksum": "0cc93daca8324809a6dcd57230d8530c", "source": { "name": "lookup", "table": "fbfm40", "source_grid_id": "your-seasonal-fbfm40-grid-id", "source_grid_checksum": "58a6416be7654925861ea545525d85ac", "source_band": "fbfm" }, "modifications": [], "bands": [ { "key": "fuel_load.1hr", "name": "1-hour Fuel Load", "description": "Oven-dry mass per unit area of 1-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 0, "nodata": null, "summary": null }, { "key": "fuel_load.live_herb", "name": "Live Herbaceous Fuel Load", "description": "Oven-dry mass per unit area of live herbaceous fuels.", "type": "continuous", "unit": "kg/m**2", "index": 1, "nodata": null, "summary": null }, { "key": "fuel_load.live_woody", "name": "Live Woody Fuel Load", "description": "Oven-dry mass per unit area of live woody fuels.", "type": "continuous", "unit": "kg/m**2", "index": 2, "nodata": null, "summary": null }, { "key": "fuel_depth", "name": "Fuel Bed Depth", "description": "Vertical depth of the surface fuel bed.", "type": "continuous", "unit": "m", "index": 3, "nodata": null, "summary": null } ], "georeference": { "crs": "EPSG:32613", "transform": [ 29.92571976224661, 0.0, 416700.0, 0.0, -29.925719762247844, 3948592.274855274 ], "shape": [104, 109] }, "error": null, "chunks": { "shape": [512, 512], "count": null, "count_by_axis": null }, "tags": []}{ "id": "your-seasonal-lookup-grid-id", "domain_id": "your-domain-id", "name": "Summer 2026 FBFM40 surface parameters", "description": "", "status": "completed", "progress": { "percent": 100, "message": "Complete" }, "created_on": "2026-08-24T22:40:49.559247Z", "modified_on": "2026-08-24T22:40:52.004143Z", "checksum": "0cc93daca8324809a6dcd57230d8530c", "source": { "source_grid_id": "your-seasonal-fbfm40-grid-id", "source_grid_checksum": "58a6416be7654925861ea545525d85ac", "source_band": "fbfm", "name": "lookup", "table": "fbfm40" }, "modifications": [], "bands": [ { "key": "fuel_load.1hr", "name": "1-hour Fuel Load", "description": "Oven-dry mass per unit area of 1-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 0, "nodata": null, "summary": { "type": "continuous", "count": 11336, "nodata_count": 0, "min": 0.0, "max": 1.3001821041107178, "mean": 0.1881926757133656, "std": 0.14935654392306527 } }, { "key": "fuel_load.live_herb", "name": "Live Herbaceous Fuel Load", "description": "Oven-dry mass per unit area of live herbaceous fuels.", "type": "continuous", "unit": "kg/m**2", "index": 1, "nodata": null, "summary": { "type": "continuous", "count": 11336, "nodata_count": 0, "min": 0.0, "max": 0.3362540006637573, "mean": 0.03157473409689053, "std": 0.06108315206499317 } }, { "key": "fuel_load.live_woody", "name": "Live Woody Fuel Load", "description": "Oven-dry mass per unit area of live woody fuels.", "type": "continuous", "unit": "kg/m**2", "index": 2, "nodata": null, "summary": { "type": "continuous", "count": 11336, "nodata_count": 0, "min": 0.0, "max": 0.7621757388114929, "mean": 0.05394222765823139, "std": 0.11248193448464859 } }, { "key": "fuel_depth", "name": "Fuel Bed Depth", "description": "Vertical depth of the surface fuel bed.", "type": "continuous", "unit": "m", "index": 3, "nodata": null, "summary": { "type": "continuous", "count": 11336, "nodata_count": 0, "min": 0.0, "max": 1.8287999629974365, "mean": 0.1955952407843476, "std": 0.18320867674238647 } } ], "georeference": { "crs": "EPSG:32613", "transform": [ 29.92571976224661, 0.0, 416700.0, 0.0, -29.925719762247844, 3948592.274855274 ], "shape": [104, 109] }, "error": null, "chunks": { "shape": [512, 512], "count": 1, "count_by_axis": { "x": 1, "y": 1 } }, "tags": []}Record the result as your-seasonal-lookup-grid-id.
Build an FBFM13 grid
Section titled “Build an FBFM13 grid”FBFM13 follows the same fetch-then-lookup pattern, but its categorical band is
fbfm13 and its parameter vocabulary includes fuel_load.live_foliage rather
than FBFM40’s separate live herbaceous and woody loads. Seasonal layers are not
available for FBFM13.
curl -X 'POST' \ 'https://api-v2-prod-782971006568.us-west1.run.app/domains/your-domain-id/grids/fbfm13/landfire' \ -H 'accept: application/json' \ -H 'api-key: my-api-key' \ -H 'Content-Type: application/json' \ -d '{ "name": "Annual FBFM13 — LF2024", "version": "2024"}'from fastfuels_sdk.v2.client_library.models import LandfireFbfm13Version
fbfm13 = ff.grids.create_fuel_model_grid_from_landfire_fbfm13( domain, version=LandfireFbfm13Version("2024"), name="Annual FBFM13 — LF2024",)fbfm13.wait(){ "id": "your-fbfm13-grid-id", "domain_id": "your-domain-id", "name": "Annual FBFM13 — LF2024", "description": "", "status": "pending", "progress": null, "created_on": "2026-08-24T22:09:35.391077", "modified_on": "2026-08-24T22:09:35.391077", "checksum": "d47a5defeb564dc29a2913ca18d88b7b", "source": { "name": "landfire", "product": "fbfm13", "version": "2024", "description": "LANDFIRE FBFM13 fuel model codes (Anderson 13 classification)", "extent_buffer_cells": 0, "alignment": { "target": "domain", "resolution": null, "method": null }, "remove_non_burnable": null }, "modifications": [], "bands": [ { "key": "fbfm13", "name": "Anderson 13 Fuel Model", "description": "Anderson 13 fire behavior fuel model code (1-13). Convert to fuel parameters via /grids/lookup/fbfm13.", "type": "categorical", "unit": null, "index": 0, "nodata": null, "summary": null } ], "georeference": null, "error": null, "chunks": { "shape": [512, 512], "count": null, "count_by_axis": null }, "tags": []}{ "id": "your-fbfm13-grid-id", "domain_id": "your-domain-id", "name": "Annual FBFM13 — LF2024", "description": "", "status": "completed", "progress": { "percent": 100, "message": "Complete" }, "created_on": "2026-08-24T22:09:35.391077Z", "modified_on": "2026-08-24T22:09:37.623791Z", "checksum": "d47a5defeb564dc29a2913ca18d88b7b", "source": { "description": "LANDFIRE FBFM13 fuel model codes (Anderson 13 classification)", "extent_buffer_cells": 0, "remove_non_burnable": null, "alignment": { "resolution": null, "target": "domain", "method": null }, "product": "fbfm13", "version": "2024", "name": "landfire" }, "modifications": [], "bands": [ { "key": "fbfm13", "name": "Anderson 13 Fuel Model", "description": "Anderson 13 fire behavior fuel model code (1-13). Convert to fuel parameters via /grids/lookup/fbfm13.", "type": "categorical", "unit": null, "index": 0, "nodata": 32767, "summary": { "type": "categorical", "count": 11227, "nodata_count": 0, "unique_count": 10 } } ], "georeference": { "crs": "EPSG:32613", "transform": [ 29.92571976224661, 0.0, 416700.0, 0.0, -29.925719762248104, 3948562.3491355116 ], "shape": [103, 109] }, "error": null, "chunks": { "shape": [512, 512], "count": 1, "count_by_axis": { "x": 1, "y": 1 } }, "tags": []}Poll the classification, save its id as your-fbfm13-grid-id, then run the FBFM13 lookup:
curl -X 'POST' \ 'https://api-v2-prod-782971006568.us-west1.run.app/domains/your-domain-id/grids/lookup/fbfm13' \ -H 'accept: application/json' \ -H 'api-key: my-api-key' \ -H 'Content-Type: application/json' \ -d '{ "name": "FBFM13 surface parameters", "source_grid_id": "your-fbfm13-grid-id", "source_band": "fbfm13", "bands": [ "fuel_load.1hr", "fuel_load.10hr", "fuel_load.100hr", "fuel_load.live_foliage", "savr.1hr", "fuel_depth" ]}'fbfm13_fuel = ff.grids.create_fuel_grid_from_fbfm13_lookup( fbfm13, bands=[ "fuel_load.1hr", "fuel_load.10hr", "fuel_load.100hr", "fuel_load.live_foliage", "savr.1hr", "fuel_depth", ], name="FBFM13 surface parameters",)fbfm13_fuel.wait(){ "id": "your-fbfm13-lookup-grid-id", "domain_id": "your-domain-id", "name": "FBFM13 surface parameters", "description": "", "status": "pending", "progress": null, "created_on": "2026-08-24T22:09:51.029045", "modified_on": "2026-08-24T22:09:51.029045", "checksum": "43682cb5a869432181803d12e61684b5", "source": { "name": "lookup", "table": "fbfm13", "source_grid_id": "your-fbfm13-grid-id", "source_grid_checksum": "d47a5defeb564dc29a2913ca18d88b7b", "source_band": "fbfm13" }, "modifications": [], "bands": [ { "key": "fuel_load.1hr", "name": "1-hour Fuel Load", "description": "Oven-dry mass per unit area of 1-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 0, "nodata": null, "summary": null }, { "key": "fuel_load.10hr", "name": "10-hour Fuel Load", "description": "Oven-dry mass per unit area of 10-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 1, "nodata": null, "summary": null }, { "key": "fuel_load.100hr", "name": "100-hour Fuel Load", "description": "Oven-dry mass per unit area of 100-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 2, "nodata": null, "summary": null }, { "key": "fuel_load.live_foliage", "name": "Live Foliage Fuel Load", "description": "Oven-dry mass per unit area of live foliage fuels.", "type": "continuous", "unit": "kg/m**2", "index": 3, "nodata": null, "summary": null }, { "key": "savr.1hr", "name": "1-hour Surface-Area-to-Volume Ratio", "description": "Surface-area-to-volume ratio of 1-hour timelag dead fuels.", "type": "continuous", "unit": "1/m", "index": 4, "nodata": null, "summary": null }, { "key": "fuel_depth", "name": "Fuel Bed Depth", "description": "Vertical depth of the surface fuel bed.", "type": "continuous", "unit": "m", "index": 5, "nodata": null, "summary": null } ], "georeference": { "crs": "EPSG:32613", "transform": [ 29.92571976224661, 0.0, 416700.0, 0.0, -29.925719762248104, 3948562.3491355116 ], "shape": [103, 109] }, "error": null, "chunks": { "shape": [512, 512], "count": null, "count_by_axis": null }, "tags": []}{ "id": "your-fbfm13-lookup-grid-id", "domain_id": "your-domain-id", "name": "FBFM13 surface parameters", "description": "", "status": "completed", "progress": { "percent": 100, "message": "Complete" }, "created_on": "2026-08-24T22:09:51.029045Z", "modified_on": "2026-08-24T22:09:54.848976Z", "checksum": "43682cb5a869432181803d12e61684b5", "source": { "source_grid_id": "your-fbfm13-grid-id", "table": "fbfm13", "source_band": "fbfm13", "source_grid_checksum": "d47a5defeb564dc29a2913ca18d88b7b", "name": "lookup" }, "modifications": [], "bands": [ { "key": "fuel_load.1hr", "name": "1-hour Fuel Load", "description": "Oven-dry mass per unit area of 1-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 0, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 1.1230883598327637, "mean": 0.3324958127172163, "std": 0.20341264526641092 } }, { "key": "fuel_load.10hr", "name": "10-hour Fuel Load", "description": "Oven-dry mass per unit area of 10-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 1, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 9.190942764282227, "mean": 2.230372868654824, "std": 3.7375844290911853 } }, { "key": "fuel_load.100hr", "name": "100-hour Fuel Load", "description": "Oven-dry mass per unit area of 100-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 2, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 1.1230883598327637, "mean": 0.16114514126711393, "std": 0.23477466697174199 } }, { "key": "fuel_load.live_foliage", "name": "Live Foliage Fuel Load", "description": "Oven-dry mass per unit area of live foliage fuels.", "type": "continuous", "unit": "kg/m**2", "index": 3, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 1.1230883598327637, "mean": 0.1614138969407116, "std": 0.2153653120876737 } }, { "key": "savr.1hr", "name": "1-hour Surface-Area-to-Volume Ratio", "description": "Surface-area-to-volume ratio of 1-hour timelag dead fuels.", "type": "continuous", "unit": "1/m", "index": 4, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 9842.51953125, "mean": 6019.08599551792, "std": 2348.0657644205244 } }, { "key": "fuel_depth", "name": "Fuel Bed Depth", "description": "Vertical depth of the surface fuel bed.", "type": "continuous", "unit": "m", "index": 5, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 1.8287999629974365, "mean": 0.38826367970902104, "std": 0.3125352642042458 } } ], "georeference": { "crs": "EPSG:32613", "transform": [ 29.92571976224661, 0.0, 416700.0, 0.0, -29.925719762248104, 3948562.3491355116 ], "shape": [103, 109] }, "error": null, "chunks": { "shape": [512, 512], "count": 1, "count_by_axis": { "x": 1, "y": 1 } }, "tags": []}Record the result as your-fbfm13-lookup-grid-id.
Build an FCCS grid
Section titled “Build an FCCS grid”FCCS uses fuelbed identifiers and exposes a different set of physical
components — litter, duff, live shrub, and live herbaceous load rather than
the timelag-based bands of the FBFM products. Like FBFM13, FCCS has no
seasonal layers. remove_bare_ground controls whether bare-ground fuelbeds
are removed during the fetch.
curl -X 'POST' \ 'https://api-v2-prod-782971006568.us-west1.run.app/domains/your-domain-id/grids/fccs/landfire' \ -H 'accept: application/json' \ -H 'api-key: my-api-key' \ -H 'Content-Type: application/json' \ -d '{ "name": "FCCS fuelbeds — LF2023", "version": "2023", "remove_bare_ground": false}'from fastfuels_sdk.v2.client_library.models import LandfireFccsVersion
fccs = ff.grids.create_fuel_model_grid_from_landfire_fccs( domain, version=LandfireFccsVersion("2023"), remove_bare_ground=False, name="FCCS fuelbeds — LF2023",)fccs.wait(){ "id": "your-fccs-grid-id", "domain_id": "your-domain-id", "name": "FCCS fuelbeds — LF2023", "description": "", "status": "pending", "progress": null, "created_on": "2026-08-24T22:09:38.084626", "modified_on": "2026-08-24T22:09:38.084626", "checksum": "792e36efecc14e3c9575d29bd52fe6d8", "source": { "name": "landfire", "product": "fccs", "version": "2023", "description": "LANDFIRE FCCS fuelbed IDs", "extent_buffer_cells": 0, "alignment": { "target": "domain", "resolution": null, "method": null }, "remove_bare_ground": false }, "modifications": [], "bands": [ { "key": "fccs", "name": "FCCS Fuelbed ID", "description": "Fuel Characteristic Classification System (FCCS) fuelbed identifier. Convert to fuel parameters via /grids/lookup/fccs.", "type": "categorical", "unit": null, "index": 0, "nodata": null, "summary": null } ], "georeference": null, "error": null, "chunks": { "shape": [512, 512], "count": null, "count_by_axis": null }, "tags": []}{ "id": "your-fccs-grid-id", "domain_id": "your-domain-id", "name": "FCCS fuelbeds — LF2023", "description": "", "status": "completed", "progress": { "percent": 100, "message": "Complete" }, "created_on": "2026-08-24T22:09:38.084626Z", "modified_on": "2026-08-24T22:09:40.088202Z", "checksum": "792e36efecc14e3c9575d29bd52fe6d8", "source": { "description": "LANDFIRE FCCS fuelbed IDs", "extent_buffer_cells": 0, "alignment": { "resolution": null, "target": "domain", "method": null }, "product": "fccs", "remove_bare_ground": false, "version": "2023", "name": "landfire" }, "modifications": [], "bands": [ { "key": "fccs", "name": "FCCS Fuelbed ID", "description": "Fuel Characteristic Classification System (FCCS) fuelbed identifier. Convert to fuel parameters via /grids/lookup/fccs.", "type": "categorical", "unit": null, "index": 0, "nodata": 2147483647, "summary": { "type": "categorical", "count": 11227, "nodata_count": 0, "unique_count": 34 } } ], "georeference": { "crs": "EPSG:32613", "transform": [ 29.92571976224661, 0.0, 416700.0, 0.0, -29.925719762248104, 3948562.3491355116 ], "shape": [103, 109] }, "error": null, "chunks": { "shape": [512, 512], "count": 1, "count_by_axis": { "x": 1, "y": 1 } }, "tags": []}Poll the classification, save its id as your-fccs-grid-id, then use
the FCCS lookup and its fccs source band:
curl -X 'POST' \ 'https://api-v2-prod-782971006568.us-west1.run.app/domains/your-domain-id/grids/lookup/fccs' \ -H 'accept: application/json' \ -H 'api-key: my-api-key' \ -H 'Content-Type: application/json' \ -d '{ "name": "FCCS surface parameters", "source_grid_id": "your-fccs-grid-id", "source_band": "fccs", "bands": [ "fuel_load.litter", "fuel_load.duff", "duff_depth", "fuel_load.live_shrub", "fuel_load.live_herb", "fuel_load.1hr" ]}'fccs_fuel = ff.grids.create_fuel_grid_from_fccs_lookup( fccs, bands=[ "fuel_load.litter", "fuel_load.duff", "duff_depth", "fuel_load.live_shrub", "fuel_load.live_herb", "fuel_load.1hr", ], name="FCCS surface parameters",)fccs_fuel.wait(){ "id": "your-fccs-lookup-grid-id", "domain_id": "your-domain-id", "name": "FCCS surface parameters", "description": "", "status": "pending", "progress": null, "created_on": "2026-08-24T22:09:56.056085", "modified_on": "2026-08-24T22:09:56.056085", "checksum": "105ed0a4ef3b4c7a8dcb0fd7405b4121", "source": { "name": "lookup", "table": "fccs", "source_grid_id": "your-fccs-grid-id", "source_grid_checksum": "792e36efecc14e3c9575d29bd52fe6d8", "source_band": "fccs" }, "modifications": [], "bands": [ { "key": "fuel_load.litter", "name": "Litter Fuel Load", "description": "Oven-dry mass per unit area of the litter layer.", "type": "continuous", "unit": "kg/m**2", "index": 0, "nodata": null, "summary": null }, { "key": "fuel_load.duff", "name": "Duff Fuel Load", "description": "Oven-dry mass per unit area of the duff layer.", "type": "continuous", "unit": "kg/m**2", "index": 1, "nodata": null, "summary": null }, { "key": "duff_depth", "name": "Duff Layer Depth", "description": "Vertical depth of the duff layer.", "type": "continuous", "unit": "m", "index": 2, "nodata": null, "summary": null }, { "key": "fuel_load.live_shrub", "name": "Live Shrub Fuel Load", "description": "Oven-dry mass per unit area of live shrub fuels.", "type": "continuous", "unit": "kg/m**2", "index": 3, "nodata": null, "summary": null }, { "key": "fuel_load.live_herb", "name": "Live Herbaceous Fuel Load", "description": "Oven-dry mass per unit area of live herbaceous fuels.", "type": "continuous", "unit": "kg/m**2", "index": 4, "nodata": null, "summary": null }, { "key": "fuel_load.1hr", "name": "1-hour Fuel Load", "description": "Oven-dry mass per unit area of 1-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 5, "nodata": null, "summary": null } ], "georeference": { "crs": "EPSG:32613", "transform": [ 29.92571976224661, 0.0, 416700.0, 0.0, -29.925719762248104, 3948562.3491355116 ], "shape": [103, 109] }, "error": null, "chunks": { "shape": [512, 512], "count": null, "count_by_axis": null }, "tags": []}{ "id": "your-fccs-lookup-grid-id", "domain_id": "your-domain-id", "name": "FCCS surface parameters", "description": "", "status": "completed", "progress": { "percent": 100, "message": "Complete" }, "created_on": "2026-08-24T22:09:56.056085Z", "modified_on": "2026-08-24T22:09:59.364545Z", "checksum": "105ed0a4ef3b4c7a8dcb0fd7405b4121", "source": { "source_grid_id": "your-fccs-grid-id", "table": "fccs", "source_band": "fccs", "source_grid_checksum": "792e36efecc14e3c9575d29bd52fe6d8", "name": "lookup" }, "modifications": [], "bands": [ { "key": "fuel_load.litter", "name": "Litter Fuel Load", "description": "Oven-dry mass per unit area of the litter layer.", "type": "continuous", "unit": "kg/m**2", "index": 0, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 0.3990213871002197, "mean": 0.13599093264581688, "std": 0.09801640019370758 } }, { "key": "fuel_load.duff", "name": "Duff Fuel Load", "description": "Oven-dry mass per unit area of the duff layer.", "type": "continuous", "unit": "kg/m**2", "index": 1, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 2.6900320053100586, "mean": 0.32078356955306947, "std": 0.41629612575548464 } }, { "key": "duff_depth", "name": "Duff Layer Depth", "description": "Vertical depth of the duff layer.", "type": "continuous", "unit": "m", "index": 2, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 0.05079999938607216, "mean": 0.00843774580213052, "std": 0.007855024235531189 } }, { "key": "fuel_load.live_shrub", "name": "Live Shrub Fuel Load", "description": "Oven-dry mass per unit area of live shrub fuels.", "type": "continuous", "unit": "kg/m**2", "index": 3, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 1.291215419769287, "mean": 0.3402619584686434, "std": 0.22607215857984334 } }, { "key": "fuel_load.live_herb", "name": "Live Herbaceous Fuel Load", "description": "Oven-dry mass per unit area of live herbaceous fuels.", "type": "continuous", "unit": "kg/m**2", "index": 4, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 0.9841033220291138, "mean": 0.033774552226371525, "std": 0.033838478830644635 } }, { "key": "fuel_load.1hr", "name": "1-hour Fuel Load", "description": "Oven-dry mass per unit area of 1-hour timelag dead fuels.", "type": "continuous", "unit": "kg/m**2", "index": 5, "nodata": null, "summary": { "type": "continuous", "count": 11227, "nodata_count": 0, "min": 0.0, "max": 0.11208466440439224, "mean": 0.03188208143888027, "std": 0.017489461439320904 } } ], "georeference": { "crs": "EPSG:32613", "transform": [ 29.92571976224661, 0.0, 416700.0, 0.0, -29.925719762248104, 3948562.3491355116 ], "shape": [103, 109] }, "error": null, "chunks": { "shape": [512, 512], "count": 1, "count_by_axis": { "x": 1, "y": 1 } }, "tags": []}Record the result as your-fccs-lookup-grid-id.
Use the live API reference for the complete, current lookup-band enums. FBFM40, FBFM13, and FCCS accept different band names; do not reuse a band list across products without checking it.
Scatter category boundaries
Section titled “Scatter category boundaries”LANDFIRE classifies fuels on a 30 m grid. When the output resolution is finer
than 30 m — 2 m for QUIC-Fire, for instance — nearest-neighbor resampling
copies each 30 m code into a block of identical cells, producing staircase
edges between fuel model categories. boundary_scatter replaces those edges
with ragged, natural-looking transitions by probabilistically mixing codes at
category boundaries.

A 320 × 320 m detail of FBFM40 at 2 m resolution. Without scatter (left), each 30 m source cell becomes a 15 × 15 block of identical codes, producing staircase edges. With scatter (right), codes are probabilistically mixed at category boundaries. The NB1 boundary stays sharp — non-burnable codes are protected from scattering.
Add boundary_scatter to any FBFM40, FBFM13, or FCCS create request.
Pass {} for the defaults (depth 10, seed 42), or set them explicitly:
| Parameter | Default | Meaning |
|---|---|---|
depth | 10 | How many cells deep scattering can reach (1–50). Swap probability halves with each cell of distance, so most mixing happens in the first 3–4 cells. |
seed | 42 | Random seed for reproducible results. |
curl -X 'POST' \ 'https://api-v2-prod-782971006568.us-west1.run.app/domains/your-domain-id/grids/fbfm40/landfire' \ -H 'accept: application/json' \ -H 'api-key: my-api-key' \ -H 'Content-Type: application/json' \ -d '{ "name": "FBFM40 — LF2024, 2 m scatter", "version": "2024", "alignment": { "target": "domain", "resolution": 2.0 }, "boundary_scatter": {}}'scatter = ff.grids.create_fuel_model_grid_from_landfire_fbfm40( domain, version=LandfireFbfm40Version("2024"), output_resolution_m=2.0, boundary_scatter=True, name="FBFM40 — LF2024, 2 m scatter",)scatter.wait(){ "id": "your-fbfm40-grid-id", "domain_id": "your-domain-id", "name": "FBFM40 — LF2024, 2 m scatter", "description": "", "status": "pending", "progress": null, "created_on": "2026-09-03T17:41:36.884764", "modified_on": "2026-09-03T17:41:36.884764", "checksum": "f11c5f73abf34aeca7a93dd78bb744ca", "source": { "name": "landfire", "product": "fbfm40", "version": "2024", "description": "LANDFIRE FBFM40 fuel model codes (Scott-Burgan 40 classification)", "extent_buffer_cells": 0, "alignment": { "target": "domain", "resolution": 2.0, "method": null }, "remove_non_burnable": null, "boundary_scatter": { "depth": 10, "seed": 42 }, "season": null, "year": 2024 }, "modifications": [], "bands": [ { "key": "fbfm", "name": "Scott & Burgan 40 Fuel Model", "description": "Scott & Burgan 40 fire behavior fuel model code (e.g. GR1, TL3, SH5). Convert to fuel parameters via /grids/lookup/fbfm40.", "type": "categorical", "unit": null, "index": 0, "nodata": null, "summary": null } ], "georeference": null, "error": null, "chunks": { "shape": [512, 512], "count": null, "count_by_axis": null }, "tags": []}{ "id": "your-fbfm40-grid-id", "domain_id": "your-domain-id", "name": "FBFM40 — LF2024, 2 m scatter", "description": "", "status": "completed", "progress": { "percent": 100, "message": "Complete" }, "created_on": "2026-09-03T17:41:36.884764Z", "modified_on": "2026-09-03T17:41:40.045315Z", "checksum": "f11c5f73abf34aeca7a93dd78bb744ca", "source": { "name": "landfire", "product": "fbfm40", "version": "2024", "description": "LANDFIRE FBFM40 fuel model codes (Scott-Burgan 40 classification)", "extent_buffer_cells": 0, "alignment": { "target": "domain", "resolution": 2.0, "method": null }, "remove_non_burnable": null, "boundary_scatter": { "depth": 10, "seed": 42 }, "season": null, "year": 2024 }, "modifications": [], "bands": [ { "key": "fbfm", "name": "Scott & Burgan 40 Fuel Model", "description": "Scott & Burgan 40 fire behavior fuel model code (e.g. GR1, TL3, SH5). Convert to fuel parameters via /grids/lookup/fbfm40.", "type": "categorical", "unit": null, "index": 0, "nodata": 32767, "summary": { "type": "categorical", "count": 2079648, "nodata_count": 0, "unique_count": 13 } } ], "georeference": { "crs": "EPSG:32613", "transform": [2.0, 0.0, 412749.67607424647, 0.0, -2.0, 3950327.7053217855], "shape": [1566, 1328] }, "error": null, "chunks": { "shape": [512, 512], "count": 12, "count_by_axis": { "y": 4, "x": 3 } }, "tags": []}The response records boundary_scatter in source with the resolved
defaults. Downstream lookups work identically — point the lookup at this
classification the same way you would point it at a native-resolution one.
Check what’s available for your domain
Section titled “Check what’s available for your domain”Each product has a coverage check that lists every version and season the API can serve for your domain, reports whether each one fully covers it, and identifies the latest release. Run it before choosing a version, especially for seasonal requests or domains near the edge of a LANDFIRE region.
curl -X 'GET' \ 'https://api-v2-prod-782971006568.us-west1.run.app/domains/your-domain-id/grids/fbfm40/landfire/coverage' \ -H 'accept: application/json' \ -H 'api-key: my-api-key'import fastfuels_sdk.v2 as ff
ff.set_api_key("my-api-key")
domain = ff.Domain.from_id("your-domain-id")
coverage = ff.grids.check_landfire_fbfm40_coverage(domain)print(f"Latest: {coverage.latest}")print(f"Releases: {len(coverage.releases)}")for release in coverage.releases: print(f" {release.version} {release.season or 'annual':>7} " f"year={release.year} coverage={release.coverage}"){ "product": "fbfm40", "latest": { "version": "2025", "season": "SU", "year": 2026, "coverage": "full", "links": { "create": { "href": "/domains/your-domain-id/grids/fbfm40/landfire", "method": "POST", "body": { "version": "2025", "season": "SU" } } } }, "releases": [ { "version": "2025", "season": "FA", "year": null, "coverage": "unpublished", "links": { "create": null } }, { "version": "2025", "season": "SU", "year": 2026, "coverage": "full", "links": { "create": { "href": "/domains/your-domain-id/grids/fbfm40/landfire", "method": "POST", "body": { "version": "2025", "season": "SU" } } } }, { "version": "2025", "season": "SP", "year": 2026, "coverage": "full", "links": { "create": { "href": "/domains/your-domain-id/grids/fbfm40/landfire", "method": "POST", "body": { "version": "2025", "season": "SP" } } } }, { "version": "2025", "season": "ES", "year": 2026, "coverage": "full", "links": { "create": { "href": "/domains/your-domain-id/grids/fbfm40/landfire", "method": "POST", "body": { "version": "2025", "season": "ES" } } } }, { "version": "2025", "season": null, "year": 2025, "coverage": "full", "links": { "create": { "href": "/domains/your-domain-id/grids/fbfm40/landfire", "method": "POST", "body": { "version": "2025" } } } }, { "version": "2024", "season": null, "year": 2024, "coverage": "full", "links": { "create": { "href": "/domains/your-domain-id/grids/fbfm40/landfire", "method": "POST", "body": { "version": "2024" } } } }, { "version": "2023", "season": null, "year": 2023, "coverage": "full", "links": { "create": { "href": "/domains/your-domain-id/grids/fbfm40/landfire", "method": "POST", "body": { "version": "2023" } } } }, { "version": "2022", "season": null, "year": 2022, "coverage": "full", "links": { "create": { "href": "/domains/your-domain-id/grids/fbfm40/landfire", "method": "POST", "body": { "version": "2022" } } } }, { "version": "2020", "season": null, "year": 2020, "coverage": "full", "links": { "create": { "href": "/domains/your-domain-id/grids/fbfm40/landfire", "method": "POST", "body": { "version": "2020" } } } }, { "version": "2019", "season": null, "year": 2019, "coverage": "full", "links": { "create": { "href": "/domains/your-domain-id/grids/fbfm40/landfire", "method": "POST", "body": { "version": "2019" } } } } ]}The releases array is sorted newest first. Each entry reports:
coverage: "full"— the version fully covers the domain and can be created.links.createcontains the ready-made request: POST itsbodyto itshref(a path relative to the API base URL).coverage: "partial"— the domain straddles a LANDFIRE region boundary. The create succeeds, but cells outside the served area are nodata.coverage: "none"— LANDFIRE serves this release in other regions but not here.links.createisnull.coverage: "unpublished"— the season has not been published anywhere yet.yearisnull.
latest is the most recent release that fully covers the domain, whether
annual or seasonal. In this example the domain is in the Southwest, where
LANDFIRE has published seasonal fuels through summer 2026, so latest is
LF2025 SU. A domain in a region where seasonal coverage has not rolled out
would show an annual vintage as latest instead.
FBFM13 and FCCS have the same check at their own paths
(/grids/fbfm13/landfire/coverage and /grids/fccs/landfire/coverage). Neither
product has seasonal entries.
Inspect and prepare the result
Section titled “Inspect and prepare the result”The lookup grid is the continuous surface-fuel product. The source classification remains useful for auditing which code produced each value.
- Fetch grid data to inspect values and summaries.
- Mask roads or water when those features should be non-burnable in your use case.
- Resample a grid when a downstream model requires a different resolution or lattice.
- Compute dead fuel moisture from a surface-fuel grid and weather conditions using the Fosberg model.
- Create QUIC-Fire simulation inputs to align the complete landscape and export its physical bands.
- Set up a QUIC-Fire simulation after downloading the export.
- Read About surface fuels for the relationship among classifications, lookup parameters, and modeled fuels.
Common pitfalls
Section titled “Common pitfalls”- Treating category codes as physical values. Run the lookup before using loads, depths, or SAVR in a model.
- Using the wrong source band. Use
fbfmfor FBFM40,fbfm13for FBFM13, andfccsfor FCCS. - Running a lookup before the classification completes. Poll the fetch to
completed; the lookup reads its stored cell values. - Assuming a season or vintage is available everywhere. Run the
coverage check first. A domain
with full annual coverage may still report
nonefor a given season, and on-demand vintages roll out region by region. - Confusing vintage and represented year.
source.versionis the landscape vintage (the generation of LANDFIRE data);source.yearis the calendar year the data represents. They match for annual products but diverge for seasonal layers, where the year is read from the LFPS catalog. - Comparing grids without checking georeferencing. Compare
crs,transform, andshape; crop or resample to a common footprint when needed. - Treating resampling as added detail. Resampling a LANDFIRE grid to smaller cells changes its lattice, not the information content of the source product.
- Applying boundary scatter at native resolution. Scatter has no effect
when the output resolution matches the source (30 m). Set
alignment.resolutionto a finer grid before enabling it.