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: true on ingestion to opt into the Enhanced methodology, which adds a higher-sensitivity time-series change-detection layer. The flag is only valid when metrics includes 'deforestation'. Every deforestation row carries an enhanced_deforestation boolean 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.)

FieldUnitLevelsWhat it tells you
noncompliance_areahaallArea of EUDR non-compliant deforestation detected within the geometry. The single most important raw figure.
noncompliance_area_percfraction (0–1)allnoncompliance_area / area. Multiply by 100 for the deforestation rate as a percentage.
is_compliantboolean / nullallEUDR 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_excludedbooleanplotstrue 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_exemptboolean / nullplotstrue 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_outcomestring / nullplotsOn 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_countcountsheds, facilitiesNumber of plots that breach the de minimis threshold.
excluded_plot_countcount / nullsheds, facilitiesNumber 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_countcountfacilitiesNumber of compliant plots. Equal to plot_count − noncompliance_plot_count.
noncompliance_area_ratefraction/yearfacilitiesAnnualised rate of non-compliant area accumulation.
deforestation_alertenumallOne of no deforestation, non-critical, critical. Computed from noncompliance_area and overlap.natural_forest.
deforestation_confidenceenumallOne of no detection, very low, low, medium, high, very high. Computed using both natural-forest overlap and commodity overlap (see Confidence Levels below).
plot_countcountsheds, facilitiesTotal plots aggregated.
stat_typeenum / nullshedsHow the shed boundary was drawn: watershed, admin_area or supply_shed. Null when not yet recorded. Not filterable.
forest_areahaallBaseline natural forest area at the EUDR cut-off date.
areahaplots, facilitiesGeometry area used as the denominator for the percentage.
agreementobjectallPer-detector agreement on detected loss (see Change Detection Datasets).
overlapobjectallOverlap of detected loss with reference forest, protected-area and commodity layers.
annual_deforobjectallPer-year non-compliant deforestation breakdown (defor_ha_YYYY, defor_ha_rmse_YYYY).
uncertainty_rrmsedimensionlessallRelative RMSE of the deforestation estimate.
thumbnail_urlurlallFilmstrip thumbnail for the change-detection visual.
monitoring_start_date / monitoring_end_dateISO 8601allWindow over which non-compliant deforestation was assessed.
deforestation_start / deforestation_endISO 8601allBounds of the actual detected loss events within the window. Empty (null) when no loss was detected.
ingestion_dateISO 8601allWhen 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-14 to scope to rows where is_compliant is guaranteed non-null. A narrower filter[monitoring_start_date]=eq:2020-12-31 also works if you want the cut-off-anchored row specifically. The bare filter[is_compliant]=eq:true|false filter 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 nested eudr.* accessor on metric responses.

How is_compliant is computed

A 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_datenoncompliance_areais_compliantInterpretation
Within ±14 days of 2020-12-31≤ 0.5 hatrueEUDR-equivalent row, plot passes the de minimis test.
Within ±14 days of 2020-12-31> 0.5 hafalseEUDR-equivalent row, plot breaches the de minimis test.
Outside ±14 days of 2020-12-31any valuenullRow 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:

Rowmonitoring_start_datenoncompliance_areais_compliant
User-period2017-01-01T00:00:00Z0.3 hanull
EUDR-period2020-12-31T00:00:00Z0.3 hatrue

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]

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:

ValueReturnsUse it when
filter[deforestation_period]=eq:eudrOnly 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:userOnly 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). On latest the filter is applied before the per-location pick, so eq:eudr deterministically returns the EUDR row.
  • Facility aggregates (/metrics/facilities/deforestation) are anchored to the EUDR period only, so eq:user returns 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.

DatasetTierResolutionCoverageDescription
GFW-GLAD Landsat (GLAD-L)Standard30 mGlobal (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)Standard10 mGlobal (2018–present)Higher-resolution companion to GLAD-L using Sentinel-2 imagery. Near-real-time alert system.
RADD AlertsStandard10 mHumid tropicsRadar-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 DISTStandard30 mGlobalNASA Harmonized Landsat/Sentinel-2 disturbance alerts. Provides vegetation disturbance status and confidence.
JRC-TMF Annual DeforestationStandard30 mHumid tropicsEU Forest Observatory dataset. Conservative, maps deforestation of natural forests only. Year-of-loss until 2022.
Epoch CCDC (Dynamic World)Enhanced (opt-in)10 mGlobal (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)

DatasetCoverageDescription
Nature Trace Forest Typology 2020 (FORTY)Global, 10 mSix-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 ModelsGlobalForest 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:

ScopeDatasetSourceExempt classes / filter
GlobalNature Trace Forest Typology 2020 (FORTY) — baselineNature Trace CatalogPlantation-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.
GlobalJRC GFC2020 SubtypesBourgoin et al., 2024Managed forest (subtype 20) — supplements FORTY with institutionally-classified managed stands.
CanadaManaged Forest Inventory v2020Natural Resources CanadaLong-Term Crown Tenure (11), Short-Term Crown Tenure (12), Indian Reserve (32), Treaty/Settlement Lands (40), Private (50)
USAForest OwnershipUSDA Forest ServiceFamily Forest (3), Corporate/Other Private (4), Tribal (5). Public forests excluded.
EstoniaForest Register (Metsaregister)Keskkonnaamet WFSAll eraldis (forest stands) excl. protection forests (yp_kaitsemets)
LatviaForest State Register (MVR)VMD / data.gov.lvActive stands (zkat=10) with no harvest restrictions (saimn_d_ie=6)
LithuaniaForest CadasterVMT geoportalEconomically managed forest parcels (~1.7M records)
NorwaySR16 Forest Resource MapNIBIOForest management planning areas (skogressursflate, 8.5M features)
SwedenAvverkningsanmälningarSkogsstyrelsenRegistered harvest notifications (2021–2026, 154K polygons, ~583K ha)
FinlandMetsävarakuviot (Forest Resource Inventory)Metsäkeskus19 province GeoPackages: maingroup=1 (forest land) excluding stands with cutting/silviculture restrictions
PolandBank Danych o Lasach (BDL)Polish State Forests WFSforest_fun='GOSP' (commercial/production forest) across 17 RDLP regions
DenmarkDigitalt Skovkort 2022Miljøstyrelsen WFSForest polygons excluding Natura 2000 §25 habitats and urørt skov (untouched forest)
SloveniaOdseki gozdni (Forest Compartments)ZGS WFSkatgozd='2' (forestry measures allowed — commercial)
PortugalCOS 2018DGT (Direcção-Geral do Território)Eucalipto (class 312), Pinheiro bravo (class 321)
AustraliaTenure of Forests 2023ABARESCommercial plantation + Multiple Use Forest (MUF)
New ZealandLCDB v6Manaaki Whenua – Landcare ResearchExotic Forest (class 41) — commercial Pinus radiata plantations
BrazilMapBiomas LULC v1MapBiomasForest plantation (class 9 — Silvicultura)
ChileMapBiomas ChileMapBiomasForest plantation (class 9) — Pinus radiata, Eucalyptus
UruguayMapBiomas Uruguay Collection 1MapBiomasForest plantation (class 9)
IndonesiaMapBiomas Indonesia Collection 2MapBiomasForest plantation (class 9 — HTI)
South AfricaNational Land Cover 2020Dept. of Forestry, Fisheries and the EnvironmentPlanted 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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).

CommodityData SourceNotes
PalmForest Data Partnership palm probability modelAvailable for 2020 and 2023. Earlier years fall back to 2020 baseline.
CocoaFDP cocoa probability modelSame availability as palm.
RubberFDP rubber probability modelSame availability as palm.
CoffeeFDP coffee probability modelSame availability as palm.
SoyGLAD soy_annual_SAAnnual soy classification for South America. Reliable from 2020 onwards.
CattleGlobal Pasture Watch grassland classification (30 m)Available up to 2022. Later years return empty mask.
TimberFORTY natural-forest classes (Primary Forest + Naturally Regenerating Forest), filtered by declared species source-footprint where species are knownTimber 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).
ShrimpJRC 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.

AlertMeaning
no deforestationNo deforestation detected
non-criticalDeforestation detected below the critical threshold (< 0.5 ha)
criticalDeforestation 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 LevelCriteria
Very highnoncompliance_area > 0.5 ha (critical threshold) AND natural forest overlap AND target commodity detected within the plot → critical alert
Highnoncompliance_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
Mediumnoncompliance_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
Lownoncompliance_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 lownoncompliance_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:

  1. Nature Trace Forest Typology 2020 (FORTY) — Primary Forest + Naturally Regenerating Forest classes (global, 10 m)
  2. FDP Forest Persistence (global, adaptive thresholds)
  3. 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:

  1. Very high: Critical + forest + commodity (all indicators) → critical alert
  2. High: Critical + forest (forest is most reliable, even without commodity) → critical alert
  3. Medium: Critical + commodity (commodity present but forest missing) → non-critical alert
  4. 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

DatasetPurpose
GEDI LiDAR L4AFootprint-level (25 m) biomass density measurements (2018–2023). Used as training data for the AGB upscaling model.
Dynamic World ProbabilitiesLand 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

CategoryFieldDescription
LUC emissionslucEmissions from pixels where land cover changed during the monitoring period. Negative values indicate carbon loss (emissions); positive values indicate carbon gain.
Non-LUC emissionsnonlucEmissions 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 emissionsbiogenicEmissions 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 emissionssocSoil Organic Carbon emissions component, estimated separately from above-ground biomass changes.
RemovalsremovalBiomass 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

FieldUnitDescription
luc / luc_tco2eyeartCO2e/yearAnnualized LUC emissions over the monitoring period
nonluc / nonluc_tco2eyeartCO2e/yearAnnualized non-LUC emissions (agricultural practices + processing facility emissions)
biogenic / biogenic_tco2eyeartCO2e/yearBiogenic emissions from biomass stock change in absence of land use change
soc / soc_tco2eyeartCO2e/yearSoil organic carbon emissions
removal / removal_tco2eyeartCO2e/yearAnnualized removals (positive = sequestration)
total_tco2eyeartCO2e/yearNet flux: LUC + practices-based non-LUC (excludes biogenic to avoid double-counting)
intensity_ratio_tco2ettCO2e/t commodityEmissions intensity per ton of commodity produced (supply shed level)
annual_agbtCO2e/haAnnual mean above-ground biomass density per year (object with per-year values + mean/std summary)
annual_bgbtCO2e/haAnnual mean below-ground biomass density per year
annual_soctCO2e/haAnnual soil organic carbon per year
annual_lc—Annual land-cover snapshot (plot / shed only). Keys: lc_YYYY.
annual_luctCO2e/yearAnnual land-use-change emissions stream (facility level only). Keys: luc_tco2e_YYYY.
annual_emissionstCO2e/yearAnnual total emissions per year
thumbnail_urlurlFilmstrip thumbnail for the emissions tile (plot / shed).
thumbnail_url_lcurlFilmstrip thumbnail for the land-cover tile (plot / shed).
ingestion_dateISO 8601When 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_lc plot/shed object is replaced by annual_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 no annual_lc field.

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

DatasetPurpose
GEDI LiDAR L2AFootprint-level canopy height (98th percentile of waveform). Training data for the canopy height model.
Dynamic World + Sentinel-2 + Sentinel-1Input features for the upscaled canopy height model.

Response Fields

FieldUnitDescription
diversity_score0–1Rao'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_chmmAnnual canopy height model statistics (chm_m_mean_YYYY, chm_m_stdDev_YYYY)
thumbnail_urlurlFilmstrip thumbnail for the canopy-height tile
plot_countcountNumber of plots aggregated (shed / facility levels only)
ingestion_dateISO 8601When 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

DatasetVariableResolutionDescription
CHIRPS (Climate Hazards Group)Precipitation0.05 (approx. 5.5 km)Daily/monthly precipitation estimates combining satellite imagery with ground station data. Global coverage 50S–50N.
MODIS MOD16A2Potential Evapotranspiration (PET)500 m8-day composite potential evapotranspiration derived from the Penman-Monteith equation.
SMAP L4 (NASA Soil Moisture Active Passive)Soil moisture9 kmRoot-zone soil moisture estimates from passive microwave remote sensing, assimilated into a land surface model.
MODIS MOD16A2Actual Evapotranspiration (ET)500 m8-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 IndexInterpretation
0.0 – 0.2No significant water stress. Adequate precipitation and soil moisture for typical agricultural and forest productivity.
0.2 – 0.4Mild water stress. Below-average water availability that may begin to affect crop yields in rain-fed systems.
0.4 – 0.6Moderate water stress. Significant precipitation deficit and/or soil moisture depletion. Yield impacts likely in rain-fed agriculture. Irrigation demand increased.
0.6 – 0.8Severe water stress. Pronounced water deficit affecting both rain-fed and irrigated systems. Vegetation health impacts visible in ET anomalies.
0.8 – 1.0Extreme water stress. Drought conditions. Severe precipitation deficit combined with depleted soil moisture. High risk of crop failure and forest dieback.

Response Fields

FieldUnitDescription
water_stress_index0–1Composite water stress score for the monitoring period (higher = more stress)
precipitation_pet_ratiodimensionlessRatio of precipitation to PET. > 1.0 = wet, < 1.0 = dry, = 1.0 = balanced
soil_moisture_percentile0–100Current soil moisture as percentile of historical distribution. 0–20% = extremely dry, 80–100% = extremely wet
evapotranspiration_anomalystd. 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_stress0–1Annual water stress values per year (mean + std per year)
thumbnail_urlurlFilmstrip thumbnail for the water-stress tile
plot_countcountNumber of plots aggregated (shed / facility levels only)
ingestion_dateISO 8601When this row landed in our metric tables

General Considerations

These apply across all metrics:

  1. 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.
  2. Weighted area calculations — Pixel overlap is weighted proportionally, avoiding over- and under-accounting.
  3. Thumbnails vs. reported values — Thumbnails show changes in and around the plot for context. Reported metric values only cover changes within the plot boundary.
  4. Units — All units are included in the meta.units object of each metric response, so clients can display them dynamically.