Metric Methodology
This page describes the datasets, algorithms, and considerations behind each sustainability metric computed by the Epoch API. Understanding these details helps interpret results and communicate findings to stakeholders.
▶Deforestation
The deforestation metric combines multiple change detection algorithms and natural forest reference masks to provide a comprehensive, high-confidence assessment aligned with the European Union Deforestation Regulation (EUDR).
Standard vs Enhanced methodology — by default, deforestation runs with the Standard methodology (GLAD + TMF alerts). Set
metric_options.enhanced_deforestation: trueon ingestion to opt into the Enhanced methodology, which adds a higher-sensitivity time-series change-detection layer. The flag is only valid whenmetricsincludes'deforestation'. Every deforestation row carries anenhanced_deforestationboolean so callers can tell which methodology produced the values. See deforestation-methodology.md for the full trade-off, request examples, and a worked side-by-side comparison.
▶Key Response Fields
These are the headline values most consumers read first. Available at every level (plots, sheds, facilities) unless noted. All deforestation fields are emitted flat on the response attributes object — the metric endpoints do not nest EUDR fields under a separate sub-object. (The ingestion-results endpoint GET /ingestions/asset_results does nest them under attributes.eudr via a separate aggregator — see EUDR Compliance. The metric endpoints described on this page are flat.)
| Field | Unit | Levels | What it tells you |
|---|---|---|---|
noncompliance_area | ha | all | Area of EUDR non-compliant deforestation detected within the geometry. The single most important raw figure. |
noncompliance_area_perc | fraction (0–1) | all | noncompliance_area / area. Multiply by 100 for the deforestation rate as a percentage. |
is_compliant | boolean / null | all | EUDR de minimis flag — true when noncompliance_area ≤ 0.5 ha and the row's monitoring_start_date falls within ±14 days of the EUDR cut-off (2020-12-31). Returns null outside that window, since the value is only meaningful as an EUDR signal when the row anchors near the cut-off. See How is_compliant is computed for the dual-period model. |
is_excluded | boolean | plots | true when the operator excluded the plot from the due diligence statement (for example, outside the supply base), in any monitoring period. is_compliant is then null. false for every other plot. |
is_exempt | boolean / null | plots | true when the plot is compliant because its loss has a non-agricultural cause: the assessment is non_agricultural, or the operator's compliant override recorded an exemption_driver. null wherever is_compliant is null. |
suggested_outcome | string / null | plots | On a plot whose plot_assessment is non_compliant_pending_adjudication (pending review: is_compliant stays null until an operator decides): compliant or exempt, what accepting the suggested assessment_driver makes it. null otherwise. |
noncompliance_plot_count | count | sheds, facilities | Number of plots that breach the de minimis threshold. |
excluded_plot_count | count / null | sheds, facilities | Number of plots the operator excluded from the due diligence statement. Included in plot_count. null when the location has no decision-aware roll-up for the row. |
compliant_plot_count | count | facilities | Number of compliant plots. Equal to plot_count − noncompliance_plot_count. |
noncompliance_area_rate | fraction/year | facilities | Annualised rate of non-compliant area accumulation. |
deforestation_alert | enum | all | One of no deforestation, non-critical, critical. Computed from noncompliance_area and overlap.natural_forest. |
deforestation_confidence | enum | all | One of no detection, very low, low, medium, high, very high. Computed using both natural-forest overlap and commodity overlap (see Confidence Levels below). |
plot_count | count | sheds, facilities | Total plots aggregated. |
stat_type | enum / null | sheds | How the shed boundary was drawn: watershed, admin_area or supply_shed. Null when not yet recorded. Not filterable. |
forest_area | ha | all | Baseline natural forest area at the EUDR cut-off date. |
area | ha | plots, facilities | Geometry area used as the denominator for the percentage. |
agreement | object | all | Per-detector agreement on detected loss (see Change Detection Datasets). |
overlap | object | all | Overlap of detected loss with reference forest, protected-area and commodity layers. |
annual_defor | object | all | Per-year non-compliant deforestation breakdown (defor_ha_YYYY, defor_ha_rmse_YYYY). |
uncertainty_rrmse | dimensionless | all | Relative RMSE of the deforestation estimate. |
thumbnail_url | url | all | Filmstrip thumbnail for the change-detection visual. |
monitoring_start_date / monitoring_end_date | ISO 8601 | all | Window over which non-compliant deforestation was assessed. |
deforestation_start / deforestation_end | ISO 8601 | all | Bounds of the actual detected loss events within the window. Empty (null) when no loss was detected. |
ingestion_date | ISO 8601 | all | When this row landed in our metric tables. |
Filtering to EUDR-equivalent rows: pass
filter[monitoring_start_date]=gte:2020-12-17&filter[monitoring_start_date]=lte:2021-01-14to scope to rows whereis_compliantis guaranteed non-null. A narrowerfilter[monitoring_start_date]=eq:2020-12-31also works if you want the cut-off-anchored row specifically. The barefilter[is_compliant]=eq:true|falsefilter already excludes nulls inherently (an equality filter never matches null), so combining it with a date filter is only necessary when you want to include the cut-off-window rows that happen to be null due to missing data.
Sparse fieldsets: when using
fields[deforestation]=..., list the deforestation fields by their flat names (e.g.noncompliance_area,is_compliant,deforestation_alert). There is no nestedeudr.*accessor on metric responses.
▶How is_compliant is computed
is_compliant is computedA row's is_compliant value is determined entirely from two columns on the underlying stat row: monitoring_start and noncompliance_area. The flag follows three states:
monitoring_start_date | noncompliance_area | is_compliant | Interpretation |
|---|---|---|---|
Within ±14 days of 2020-12-31 | ≤ 0.5 ha | true | EUDR-equivalent row, plot passes the de minimis test. |
Within ±14 days of 2020-12-31 | > 0.5 ha | false | EUDR-equivalent row, plot breaches the de minimis test. |
Outside ±14 days of 2020-12-31 | any value | null | Row is not an EUDR assessment — typically a user-period assessment with an explicit start_date far from the cut-off. The de minimis test does not apply, so the flag is undefined rather than false. |
▶Why the ±14-day window?
The Epoch pipeline mirrors the underlying SCO2 batch model: when an ingestion specifies a start_date more than 14 days from the EUDR cut-off, the pipeline emits two rows per location to capture both perspectives — one anchored at the user's start_date (the user-period assessment) and one anchored at the EUDR cut-off (the EUDR assessment). The window absorbs day-level rounding around the cut-off so any start_date near 2020-12-31 produces a single row that is treated as the EUDR assessment.
▶Worked example: dual-period split
An upload submitted with start_date=2017-01-01 against a single plot produces two rows in the deforestation history:
| Row | monitoring_start_date | noncompliance_area | is_compliant |
|---|---|---|---|
| User-period | 2017-01-01T00:00:00Z | 0.3 ha | null |
| EUDR-period | 2020-12-31T00:00:00Z | 0.3 ha | true |
Both rows describe the same plot but answer different questions. GET /metrics/plots/deforestation (the default "latest" view) returns only one row per location, picked deterministically by the latest monitoring_end_date then by monitoring_start_date. To see both rows, use GET /metrics/plots/deforestation/history, and to pin a result to one period use the deforestation_period filter described next.
▶Selecting a period — filter[deforestation_period]
filter[deforestation_period]Because a dual-period plot has two rows that share the same monitoring_end_date, the default "latest" view's tie-break does not let you reliably say which period you received. The deforestation_period filter makes the choice explicit:
| Value | Returns | Use it when |
|---|---|---|
filter[deforestation_period]=eq:eudr | Only the EUDR-assessment rows (monitoring_start within ±14 days of 2020-12-31). | You are reporting or screening for EUDR compliance. This is the row where is_compliant is meaningful (true/false) and where noncompliance_area is measured against the regulatory cut-off. |
filter[deforestation_period]=eq:user | Only the user-period rows (everything outside that window). | You want deforestation measured since your own start_date — e.g. a supplier-onboarding baseline or a longer historical window. is_compliant is null here by design; read noncompliance_area / annual_defor instead. |
Notes:
- Works on the
latest,/history,/:commodity, and streaming variants, and on all three levels (/metrics/{plots,sheds,facilities}/deforestation). Onlatestthe filter is applied before the per-location pick, soeq:eudrdeterministically returns the EUDR row. - Facility aggregates (
/metrics/facilities/deforestation) are anchored to the EUDR period only, soeq:userreturns no rows there. - Deforestation-only. The filter is silently ignored on other metric families (biodiversity, emissions, water stress), which have no dual-period model.
- Default behaviour is unchanged — omit the filter and you get today's "latest" pick.
# The regulatory EUDR view (is_compliant is meaningful here)
curl '/metrics/plots/deforestation?filter[deforestation_period]=eq:eudr' \
-H "x-api-key: $KEY"
# Deforestation since the user's own start_date
curl '/metrics/plots/deforestation?filter[deforestation_period]=eq:user' \
-H "x-api-key: $KEY"
Example response shape (flat):
{
"data": {
"type": "deforestation",
"id": "…",
"attributes": {
"noncompliance_area": 0.32,
"noncompliance_area_perc": 0.018,
"is_compliant": true,
"noncompliance_plot_count": 0,
"plot_count": 18,
"forest_area": 14.6,
"area": 17.8,
"agreement": { "all": 0.9, "tmf": 0.8, "glad": 0.95, "dynamic_world": 0.85 },
"overlap": { "natural_forest": 0.7, "wdpa": 0.0 },
"annual_defor": { "defor_ha_2023": 0.12, "defor_ha_rmse_2023": 0.04 },
"uncertainty_rrmse": 0.11,
"thumbnail_url": "https://…",
"deforestation_alert": "critical",
"deforestation_confidence": "very high",
"monitoring_start_date": "2020-12-31T00:00:00Z",
"monitoring_end_date": "2024-12-31T00:00:00Z",
"ingestion_date": "2026-04-29T08:14:31Z"
}
}
}
▶Change Detection Datasets
Five detection systems run in the Standard methodology and are combined to maximise sensitivity while controlling false positives. A sixth system — Epoch CCDC (Dynamic World) — is an optional enhanced check that is added to the ensemble only when the Enhanced methodology is enabled (opt-in via metric_options.enhanced_deforestation: true); it does not run by default.
| Dataset | Tier | Resolution | Coverage | Description |
|---|---|---|---|---|
| GFW-GLAD Landsat (GLAD-L) | Standard | 30 m | Global (2000–present) | Well-established annual forest loss dataset (Hansen et al., 2013) via Global Forest Watch. Conservative — tends to under-detect. Provides year-of-loss only. |
| GFW-GLAD Sentinel-2 (GLAD-S2) | Standard | 10 m | Global (2018–present) | Higher-resolution companion to GLAD-L using Sentinel-2 imagery. Near-real-time alert system. |
| RADD Alerts | Standard | 10 m | Humid tropics | Radar-based (Sentinel-1) deforestation alerts from Wageningen University via GFW. Detects canopy disturbance through cloud cover, complementing optical sensors. Designed for near-real-time monitoring. |
| OPERA DIST | Standard | 30 m | Global | NASA Harmonized Landsat/Sentinel-2 disturbance alerts. Provides vegetation disturbance status and confidence. |
| JRC-TMF Annual Deforestation | Standard | 30 m | Humid tropics | EU Forest Observatory dataset. Conservative, maps deforestation of natural forests only. Year-of-loss until 2022. |
| Epoch CCDC (Dynamic World) | Enhanced (opt-in) | 10 m | Global (Sentinel-2 era) | Optional enhanced check — added only when enhanced_deforestation: true. CCDC algorithm (Zhu et al., 2014) applied to Sentinel-2 imagery combined with Dynamic World "Trees" probability. Captures phenology over a 3-year lookback to separate anthropogenic change from seasonal variation. Vetted by the EU Forest Observatory. |
Additionally, Epoch's Biomass Change Trends (10 m, global) capture gradual degradation over timescales longer than a year, complementing the abrupt change detection systems above. This ensures all types of forest loss (deforestation and degradation) are captured, aligning with the EU's definition of deforestation under EUDR.
The API returns agreement between detection systems so users can assess confidence based on multi-source consensus.
▶Natural Forest Masks (EUDR cut-off date 2020-12-31)
| Dataset | Coverage | Description |
|---|---|---|
| Nature Trace Forest Typology 2020 (FORTY) | Global, 10 m | Six-class global forest typology (Primary Forest, Naturally Regenerating Forest, Planted Forest, Plantation Forest, Tree Crops & Agroforestry, Other Land). The Primary Forest and Naturally Regenerating Forest classes define the natural-forest extent; the Planted Forest, Plantation Forest, and Tree Crops & Agroforestry classes define the non-natural-forest extent. FORTY is the single source of truth for both natural-forest and non-natural-forest baselines. |
| FDP Commodity Probability Models | Global | Forest Data Partnership commodity layers used to reduce false positives in the natural forest mask by identifying areas that are likely commodity forests. Also used for automated commodity plot identification in supply shed analysis. |
▶Managed Forest Exemptions
Under EUDR, only the loss of natural forests constitutes non-compliance — harvesting in legally-managed timber plantations or licensed managed forests is explicitly outside the regulation's scope. Detected deforestation events that fall within legally-classified managed or publicly-owned forest areas are excluded from the noncompliance_area calculation. The following datasets currently provide these exemptions:
| Scope | Dataset | Source | Exempt classes / filter |
|---|---|---|---|
| Global | Nature Trace Forest Typology 2020 (FORTY) — baseline | Nature Trace Catalog | Plantation-on-plantation conversions are excluded by construction: FORTY's Planted Forest, Plantation Forest, and Tree Crops & Agroforestry classes are not in the natural-forest baseline, so detected change in those pixels never enters noncompliance_area. |
| Global | JRC GFC2020 Subtypes | Bourgoin et al., 2024 | Managed forest (subtype 20) — supplements FORTY with institutionally-classified managed stands. |
| Canada | Managed Forest Inventory v2020 | Natural Resources Canada | Long-Term Crown Tenure (11), Short-Term Crown Tenure (12), Indian Reserve (32), Treaty/Settlement Lands (40), Private (50) |
| USA | Forest Ownership | USDA Forest Service | Family Forest (3), Corporate/Other Private (4), Tribal (5). Public forests excluded. |
| Estonia | Forest Register (Metsaregister) | Keskkonnaamet WFS | All eraldis (forest stands) excl. protection forests (yp_kaitsemets) |
| Latvia | Forest State Register (MVR) | VMD / data.gov.lv | Active stands (zkat=10) with no harvest restrictions (saimn_d_ie=6) |
| Lithuania | Forest Cadaster | VMT geoportal | Economically managed forest parcels (~1.7M records) |
| Norway | SR16 Forest Resource Map | NIBIO | Forest management planning areas (skogressursflate, 8.5M features) |
| Sweden | Avverkningsanmälningar | Skogsstyrelsen | Registered harvest notifications (2021–2026, 154K polygons, ~583K ha) |
| Finland | Metsävarakuviot (Forest Resource Inventory) | Metsäkeskus | 19 province GeoPackages: maingroup=1 (forest land) excluding stands with cutting/silviculture restrictions |
| Poland | Bank Danych o Lasach (BDL) | Polish State Forests WFS | forest_fun='GOSP' (commercial/production forest) across 17 RDLP regions |
| Denmark | Digitalt Skovkort 2022 | Miljøstyrelsen WFS | Forest polygons excluding Natura 2000 §25 habitats and urørt skov (untouched forest) |
| Slovenia | Odseki gozdni (Forest Compartments) | ZGS WFS | katgozd='2' (forestry measures allowed — commercial) |
| Portugal | COS 2018 | DGT (Direcção-Geral do Território) | Eucalipto (class 312), Pinheiro bravo (class 321) |
| Australia | Tenure of Forests 2023 | ABARES | Commercial plantation + Multiple Use Forest (MUF) |
| New Zealand | LCDB v6 | Manaaki Whenua – Landcare Research | Exotic Forest (class 41) — commercial Pinus radiata plantations |
| Brazil | MapBiomas LULC v1 | MapBiomas | Forest plantation (class 9 — Silvicultura) |
| Chile | MapBiomas Chile | MapBiomas | Forest plantation (class 9) — Pinus radiata, Eucalyptus |
| Uruguay | MapBiomas Uruguay Collection 1 | MapBiomas | Forest plantation (class 9) |
| Indonesia | MapBiomas Indonesia Collection 2 | MapBiomas | Forest plantation (class 9 — HTI) |
| South Africa | National Land Cover 2020 | Dept. of Forestry, Fisheries and the Environment | Planted Forest (class 2) — pine, eucalyptus, wattle |
To the extent that authoritative national or subnational managed forest and tenure datasets become available for additional countries, they will be progressively integrated into the exemption layer.
▶How noncompliance_area Is Derived
noncompliance_area Is Derived- Change detection: Combine signals from the Standard detection systems (GLAD-L, GLAD-S2, RADD, OPERA DIST, TMF) over the monitoring period (from the EUDR cut-off date to the end date). When the Enhanced methodology is enabled (
enhanced_deforestation: true), the optional CCDC (Dynamic World) time-series layer is added to the ensemble. Pixels where at least one active source indicates forest loss are flagged. - Natural forest filter: Only pixels classified as natural forest at the EUDR cut-off date (2020-12-31) are counted. Deforestation outside natural forest is excluded so the metric aligns with EUDR's focus on natural forest.
- Managed forest exemptions: Exclude pixels in legally-classified managed or publicly-owned forest areas covered by the tenure and ownership datasets above, regardless of detected change.
- Spatio-temporal sieving: Applied at plot level and in batch/aggregate processing (supply-shed, statistical-region). Connected components of deforested pixels are identified across the full monitoring window; only groups whose combined area meets the minimum threshold (0.5 ha, matching the EUDR critical threshold) are retained. This ensures incremental loss across years is counted while scattered noise is excluded.
- Weighted area: Partial pixels at boundaries are weighted by the proportion inside the geometry to avoid over- or under-counting.
▶Commodity Detection
Commodity presence is used in supply shed analysis (to identify commodity plots within a facility's sourcing area) and in confidence scoring (commodity overlap boosts confidence from high to very high).
| Commodity | Data Source | Notes |
|---|---|---|
| Palm | Forest Data Partnership palm probability model | Available for 2020 and 2023. Earlier years fall back to 2020 baseline. |
| Cocoa | FDP cocoa probability model | Same availability as palm. |
| Rubber | FDP rubber probability model | Same availability as palm. |
| Coffee | FDP coffee probability model | Same availability as palm. |
| Soy | GLAD soy_annual_SA | Annual soy classification for South America. Reliable from 2020 onwards. |
| Cattle | Global Pasture Watch grassland classification (30 m) | Available up to 2022. Later years return empty mask. |
| Timber | FORTY natural-forest classes (Primary Forest + Naturally Regenerating Forest), filtered by declared species source-footprint where species are known | Timber is identified as natural forest area (per FORTY) that is not classified as another commodity. When species are declared on ingestion, detection is gated to the FORTY class set that matches the species' plausible supply origin (e.g. plantation-species declarations exclude natural-forest pixels). |
| Shrimp | JRC water mask (long-term water frequency 2000–2024) | Water-based commodity detection using water occurrence. |
▶Alert Classification
The API exposes the alert as the top-level deforestation_alert field on every deforestation response.
| Alert | Meaning |
|---|---|
no deforestation | No deforestation detected |
non-critical | Deforestation detected below the critical threshold (< 0.5 ha) |
critical | Deforestation detected at or above the critical threshold (≥ 0.5 ha) |
▶Confidence Levels
The API exposes the band as the top-level deforestation_confidence field on every deforestation response.
Confidence ranges from very low to very high (or no detection). It is advised to visually inspect thumbnails for very low, low, and medium cases, as these may be due to georeferencing issues or false positives. The API may return low confidence even when noncompliance_area == 0 if the plot overlaps natural forest or protected areas (WDPA), as a conservative risk flag.
| Confidence Level | Criteria |
|---|---|
| Very high | noncompliance_area > 0.5 ha (critical threshold) AND natural forest overlap AND target commodity detected within the plot → critical alert |
| High | noncompliance_area > 0.5 ha AND natural forest overlap, but commodity detection is absent or unavailable. Large deforestation with natural forest is significant enough on its own → critical alert |
| Medium | noncompliance_area > 0.5 ha AND commodity detected, but no natural forest overlap (deforestation in non-natural forest areas, e.g. existing plantations or degraded areas) → non-critical alert |
| Low | noncompliance_area > 0.25 ha (non-critical threshold) OR has forest overlap but doesn't meet critical threshold, OR > 0.5 ha but missing both forest and commodity indicators → non-critical alert |
| Very low | noncompliance_area > 0 but doesn't meet non-critical threshold → non-critical alert |
The confidence hierarchy reflects that forest overlap is more reliable than commodity detection. Forest overlap is required for a critical alert; commodity presence boosts confidence from high to very high but is not required. If no commodity information is available (e.g. collection_hash not provided), the system defaults to assuming commodity presence for backward compatibility.
For confidence levels from low to high, it is recommended to manually inspect the thumbnails (see Thumbnail Interpretation). The underlying values used to determine confidence are available in the API response, so operators can build their own rule-based systems for reporting.
▶Deforestation Categorization Thresholds
The categorization uses absolute area thresholds (no percentage-based checks) for consistent classification across plots of varying sizes:
- Critical threshold:
noncompliance_area> 0.5 ha AND natural forest overlap — both conditions required - Non-critical threshold:
noncompliance_area> 0.25 ha (absolute area only) OR has natural forest overlap but not meeting critical threshold
Important distinction:
- Critical alert = area > 0.5 ha AND natural forest overlap (both required)
- Non-critical alert = area > 0.5 ha but no forest overlap, OR area > 0.25 ha, OR forest overlap but not meeting critical threshold
- Large deforestation (> 0.5 ha) without forest overlap is still significant but gets non-critical alert (e.g. deforestation in existing plantations, degraded areas)
- No deforestation = no detection from any source
▶EUDR Forest Definition
The EUDR defines "forest" as land spanning more than 0.5 hectares with trees higher than 5 meters and a canopy cover of more than 10%, or trees able to reach those thresholds in situ. The Epoch API distinguishes natural forests from commodity forests using multiple authoritative datasets.
▶Natural Forest Check
The natural forest check requires any overlap (> 0 ha) with natural forest or protected areas at the reference date (2020). It combines:
- Nature Trace Forest Typology 2020 (FORTY) — Primary Forest + Naturally Regenerating Forest classes (global, 10 m)
- FDP Forest Persistence (global, adaptive thresholds)
- WDPA protected areas
The check does not impose strict percentage thresholds — any overlap is sufficient. This ensures sensitivity without being overly restrictive.
▶Commodity Check
The commodity check verifies that the target commodity is present within the plot using FDP commodity probability models. Its role in the confidence hierarchy:
- Very high: Critical + forest + commodity (all indicators) → critical alert
- High: Critical + forest (forest is most reliable, even without commodity) → critical alert
- Medium: Critical + commodity (commodity present but forest missing) → non-critical alert
- Low: Critical only (missing both indicators) → non-critical alert
Commodity presence is optional for critical alerts — it acts as a confidence booster rather than a requirement. This accounts for accuracy limitations in commodity detection layers.
▶Protected Areas
UNEP's World Database on Protected Areas (WDPA) is overlaid with detected changes to flag overlap with protected areas and assess legality. A distinction is made between IUCN/CBD-defined protected areas (governed by "legal or effective" means) and those that do not fit the definition.
▶Biomass Emissions
CO2-equivalent emissions from above-ground biomass (AGB) changes driven by land use change. Annual biomass density is modelled to assess direct plot-level and area-level emissions.
▶Key Datasets
| Dataset | Purpose |
|---|---|
| GEDI LiDAR L4A | Footprint-level (25 m) biomass density measurements (2018–2023). Used as training data for the AGB upscaling model. |
| Dynamic World Probabilities | Land use transition context combined with Sentinel-2 and Sentinel-1 bands as model inputs. |
| Harmonized Landsat/Sentinel-2 (HLS) | Radiometrically consistent time series across sensors. Enables consistent predictions from 2000 onwards (30 m before 2017, 10 m after). |
▶Emission Categories
| Category | Field | Description |
|---|---|---|
| LUC emissions | luc | Emissions from pixels where land cover changed during the monitoring period. Negative values indicate carbon loss (emissions); positive values indicate carbon gain. |
| Non-LUC emissions | nonluc | Emissions not driven by land use change — includes agricultural practices (tillage, fertiliser, crop residue) and processing emissions from first-mile aggregation facilities (factories, sawmills, mills). |
| Biogenic emissions | biogenic | Emissions from biomass stock change in the absence of land use change. Measured/modelled from satellite-derived AGB trends on pixels where the land cover remained stable. |
| SOC emissions | soc | Soil Organic Carbon emissions component, estimated separately from above-ground biomass changes. |
| Removals | removal | Biomass increase due to restoration or specific intervention. Defaults to 0 if no intervention is monitored. Positive values indicate carbon uptake (sequestration). |
Below-ground biomass (BGB) is estimated through a root-to-shoot ratio applied to above-ground estimates.
▶Response Fields
| Field | Unit | Description |
|---|---|---|
luc / luc_tco2eyear | tCO2e/year | Annualized LUC emissions over the monitoring period |
nonluc / nonluc_tco2eyear | tCO2e/year | Annualized non-LUC emissions (agricultural practices + processing facility emissions) |
biogenic / biogenic_tco2eyear | tCO2e/year | Biogenic emissions from biomass stock change in absence of land use change |
soc / soc_tco2eyear | tCO2e/year | Soil organic carbon emissions |
removal / removal_tco2eyear | tCO2e/year | Annualized removals (positive = sequestration) |
total_tco2eyear | tCO2e/year | Net flux: LUC + practices-based non-LUC (excludes biogenic to avoid double-counting) |
intensity_ratio_tco2et | tCO2e/t commodity | Emissions intensity per ton of commodity produced (supply shed level) |
annual_agb | tCO2e/ha | Annual mean above-ground biomass density per year (object with per-year values + mean/std summary) |
annual_bgb | tCO2e/ha | Annual mean below-ground biomass density per year |
annual_soc | tCO2e/ha | Annual soil organic carbon per year |
annual_lc | — | Annual land-cover snapshot (plot / shed only). Keys: lc_YYYY. |
annual_luc | tCO2e/year | Annual land-use-change emissions stream (facility level only). Keys: luc_tco2e_YYYY. |
annual_emissions | tCO2e/year | Annual total emissions per year |
thumbnail_url | url | Filmstrip thumbnail for the emissions tile (plot / shed). |
thumbnail_url_lc | url | Filmstrip thumbnail for the land-cover tile (plot / shed). |
ingestion_date | ISO 8601 | When this row landed in our metric tables. |
All *_tco2ehayear variants provide the per-hectare normalised equivalents (e.g. nonluc_per_ha, total_per_ha). Per-component uncertainty fields (luc_uncertainty_sd, removal_uncertainty_sd, biogenic_uncertainty_sd) provide standard deviations.
Naming note: at the facility level the
annual_lcplot/shed object is replaced byannual_luc, which carries annual LUC emissions in tCO2e/year rather than a land-cover snapshot. Don't conflate the two — the facility emissions resource has noannual_lcfield.
▶Key Considerations
- Area calculations are weighted (partial pixel overlap accounted for)
- Biomass can be modelled from 2000 onwards (30 m before 2017, 10 m after)
- AGB model uncertainty stems from GEDI footprint positional accuracy, DEM accuracy, slope, and allometric equation representativeness
- Independent field validation is recommended for carbon accounting use cases
▶Biodiversity
Biodiversity is assessed via canopy height heterogeneity using the Rao's Q diversity index (Rocchini et al., 2021), a proxy for species diversity based on structural diversity of the canopy.
▶Key Datasets
| Dataset | Purpose |
|---|---|
| GEDI LiDAR L2A | Footprint-level canopy height (98th percentile of waveform). Training data for the canopy height model. |
| Dynamic World + Sentinel-2 + Sentinel-1 | Input features for the upscaled canopy height model. |
▶Response Fields
| Field | Unit | Description |
|---|---|---|
diversity_score | 0–1 | Rao's Q diversity score. Values < 0.5 indicate low diversity (monocultures/plantations); values > 0.5 indicate fragmented, biodiverse landscapes. |
uncertainty_sd | — | Standard deviation of the diversity score |
annual_chm | m | Annual canopy height model statistics (chm_m_mean_YYYY, chm_m_stdDev_YYYY) |
thumbnail_url | url | Filmstrip thumbnail for the canopy-height tile |
plot_count | count | Number of plots aggregated (shed / facility levels only) |
ingestion_date | ISO 8601 | When this row landed in our metric tables |
▶Water Stress
Water stress is assessed through a composite index that integrates precipitation deficits, evapotranspiration anomalies, and soil moisture conditions to provide a comprehensive measure of water availability and stress in agricultural and forested landscapes.
▶Key Datasets
| Dataset | Variable | Resolution | Description |
|---|---|---|---|
| CHIRPS (Climate Hazards Group) | Precipitation | 0.05 (approx. 5.5 km) | Daily/monthly precipitation estimates combining satellite imagery with ground station data. Global coverage 50S–50N. |
| MODIS MOD16A2 | Potential Evapotranspiration (PET) | 500 m | 8-day composite potential evapotranspiration derived from the Penman-Monteith equation. |
| SMAP L4 (NASA Soil Moisture Active Passive) | Soil moisture | 9 km | Root-zone soil moisture estimates from passive microwave remote sensing, assimilated into a land surface model. |
| MODIS MOD16A2 | Actual Evapotranspiration (ET) | 500 m | 8-day composite actual evapotranspiration. Used to compute ET anomalies relative to long-term climatology. |
▶Methodology
The water stress index is computed as a weighted composite of three sub-indices:
1. Precipitation Deficit Index (weight: 40%)
Computed from CHIRPS precipitation data as the ratio of observed precipitation to long-term potential evapotranspiration (P/PET). A ratio below 1.0 indicates that precipitation is insufficient to meet atmospheric evaporative demand. The index is normalized to a 0–1 scale using historical percentiles for the region and season.
2. Soil Moisture Anomaly Index (weight: 40%)
Computed from SMAP L4 root-zone soil moisture. For each pixel and time step, the observed soil moisture is compared to the climatological distribution (2015–present baseline). Negative anomalies (drier than normal) increase the stress score. The index is normalized to 0–1 using z-scores mapped to percentiles.
3. ET Anomaly Index (weight: 20%)
Computed from MODIS actual ET relative to climatological ET for the same location and time of year. Negative ET anomalies (less evapotranspiration than expected) indicate vegetation water stress — plants are transpiring less due to water limitation. Normalized to 0–1.
Composite Index Calculation:
water_stress_index = 0.40 * precipitation_deficit + 0.40 * soil_moisture_anomaly + 0.20 * et_anomaly
Each sub-index is clipped to the 0–1 range before weighting.
▶Interpretation Thresholds
| Water Stress Index | Interpretation |
|---|---|
| 0.0 – 0.2 | No significant water stress. Adequate precipitation and soil moisture for typical agricultural and forest productivity. |
| 0.2 – 0.4 | Mild water stress. Below-average water availability that may begin to affect crop yields in rain-fed systems. |
| 0.4 – 0.6 | Moderate water stress. Significant precipitation deficit and/or soil moisture depletion. Yield impacts likely in rain-fed agriculture. Irrigation demand increased. |
| 0.6 – 0.8 | Severe water stress. Pronounced water deficit affecting both rain-fed and irrigated systems. Vegetation health impacts visible in ET anomalies. |
| 0.8 – 1.0 | Extreme water stress. Drought conditions. Severe precipitation deficit combined with depleted soil moisture. High risk of crop failure and forest dieback. |
▶Response Fields
| Field | Unit | Description |
|---|---|---|
water_stress_index | 0–1 | Composite water stress score for the monitoring period (higher = more stress) |
precipitation_pet_ratio | dimensionless | Ratio of precipitation to PET. > 1.0 = wet, < 1.0 = dry, = 1.0 = balanced |
soil_moisture_percentile | 0–100 | Current soil moisture as percentile of historical distribution. 0–20% = extremely dry, 80–100% = extremely wet |
evapotranspiration_anomaly | std. dev. | Deviation of actual ET from climatological mean. Negative = below normal (plants water-stressed), positive = above normal |
uncertainty_sd | — | Standard deviation of the composite index, area-weighted at the shed/facility levels |
annual_water_stress | 0–1 | Annual water stress values per year (mean + std per year) |
thumbnail_url | url | Filmstrip thumbnail for the water-stress tile |
plot_count | count | Number of plots aggregated (shed / facility levels only) |
ingestion_date | ISO 8601 | When this row landed in our metric tables |
▶General Considerations
These apply across all metrics:
- Geometry accuracy matters — Results are as consistent as the input plot boundaries. Approximate geometries will pick up changes from surrounding areas not managed by the supply chain actor.
- Weighted area calculations — Pixel overlap is weighted proportionally, avoiding over- and under-accounting.
- Thumbnails vs. reported values — Thumbnails show changes in and around the plot for context. Reported metric values only cover changes within the plot boundary.
- Units — All units are included in the
meta.unitsobject of each metric response, so clients can display them dynamically.