This API lets your organisation pull the Nature, Risk and Resilience Reporting metrics for your supplying holdings straight into your own systems, dashboards or reporting tools. Each record holds the holding's details and its baseline metrics. Where the farmer has shared a Land Management Plan, it also includes future and uplift figures. Results can be filtered by date, by when they were last updated, or by search term. A second endpoint returns the name, description and display format for every metric.
To unlock the Integration API, please see this guidance.
Request
URL: https://integration-api.thelandapp.com/nature-reporting/metrics
HTTP Method: GET
Parameters type: URL query params
Parameters:
apiKey – (mandatory) API key generated by The Land App for your organisation
page – (optional) number of the page (see 3. Functionality). Default value is 0
size – (optional) size of the page (see 3. Functionality). The default value is 50. Max value is 1000
updatesSinceDate – (optional) returns only farms that have had updates on or after this date. Farms that were last updated before this date will be filtered out. Formatted: yyyy-mm-dd
asOfDate – (optional) returns each farm’s metrics as of this date. Ignores any updates to metrics after this date and filters out farms added after this date. Formatted: yyyy-mm-dd
search – (optional) phrase used to filter results by holding, leadFarmer, or mapName
Example requests:
https://integration-api.thelandapp.com/nature-reporting/metrics?apiKey={apiKey}&size=50&search=Seldon&asOfDate=2025-08-04
Response
Response HTTP codes:
- 200 if all OK
- 400 if request is wrong (proper message why it is wrong is provided)
- 500 if unhandled error on server-side occurs
Attributes in response:
Key | Data Type | Description |
id | string | A unique identifier for this metrics record. |
declaration | string | An ID referencing the associated declaration record. |
acceptedAt | string (ISO Date) | Timestamp indicating when the declaration was accepted. |
organisation | string | An ID referencing the associated organisation record (your organisation id) |
map | string | An ID referencing the associated map record. |
mapName | string | The name of the associated map. |
status | string | The current acceptance status of the record (e.g., "accepted"). |
processingStatus | string | The status of the processing state of metrics (e.g., "finished"). |
holding | string | The name or identifier of the farming holding. |
landOwnership | string | The nature of land ownership (e.g., "both"). |
leadFarmer | string | The name of the lead farmer. |
certificates | array of strings | A list of farm certifications held (e.g., "red_tractor"). |
carbonAudit | string | The type or provider of the carbon audit (e.g., "farm_carbon_toolkit"). |
processors | array of strings | A list of processors (e.g., "Dovecote Park"). |
produceTypes | array of strings | A list of types of produce types (e.g., "Beef"). |
county | array of strings | A list of counties where the holding is located (e.g., "Northumberland"). |
country | array of strings | A list of countries where the holding is located (e.g., "England"). |
createdAt | string (ISO Date) | Timestamp indicating when the record was initially created. |
baseLineArea | number | The calculated baseline area in hectares. |
updatedAt | string (ISO Date) | Timestamp indicating when the record was last updated. |
metrics | list of objects | List of metrics objects (key, baseline, future, uplift) |
anonymisation (optional) | boolean | If true, indicates that mapName, holding, and leadFarmer are all anonymised. Set by the user who has done the land declaration. |
Key | Data Type | Description |
key | string | A unique identifier for this metric. |
baseline | string/float/integer | The score generated for this metric from the "Baseline Habitat Assessment", which describes the current layout of the farm's habitats. |
future (optional) | string/float/integer | The score generated for this metric from the "Land Management Plan", which describes the future layout of the farm's habitats.
Note: Can be an empty string (“”) if not applicable for a certain farm (e.g winter_cover_ha/”Cropland with winter cover (ha)” can have the baseline value of “” if there is no cropland on the farm, as the metric is not applicable). |
uplift (optional) | string/float/integer | future score minus baseline score |
*depending on the metric type: see the possible type values here
Response model
JSON
{
page: 0,
size: 20,
hasNext: true,
data: [
{
id: string,
declaration: string,
acceptedAt: string (ISO DATE),
organisation: string,
map: string,
mapName: string,
status: string,
processingStatus: string,
holding: string,
landOwnership: string,
leadFarmer: string,
certificates: array,
carbonAudit: string,
processors: array,
produceTypes: array,
county: array,
country: array,
createdAt: string (ISO DATE),
baseLineArea: number,
updatedAt: string (ISO DATE),
__v: 0,
metrics: [
{
key: string,
baseline: number,
future: number,
uplift: number
},
...
],
},
…
],
};
Example response
JSON
{
"page": 0,
"size": 50,
"hasNext": true,
"data": [
{
"id": "6927a50b5461cc91b5700109",
"declaration": "6926fe82eebe6abf1f998d94",
"acceptedAt": "2025-11-26T13:20:57.956Z",
"organisation": "5f58c88053e4f40012156618",
"map": "68f60e77868001863250d5b0",
"mapName": "Barwhillanty_Demo",
"status": "accepted",
"processingStatus": "finished",
"holding": "Demo - Barwillhanty ",
"landOwnership": "owner",
"leadFarmer": "Land App demo",
"certificates": [
"red_tractor"
],
"carbonAudit": "agrecalc",
"processors": [
"None"
],
"produceTypes": [
"Beef",
"Venison",
"Venison (Organic)"
],
"county": [
"Dumfries and Galloway"
],
"country": [
"Scotland"
],
"createdAt": "2025-11-27T01:10:35.604Z",
"baseLineArea": 2035.7409315803645,
"updatedAt": "2025-11-27T01:11:00.843Z",
"__v": 0,
"metrics": [
{
"key": "habitatBngUnits",
"baseline": 9962.23590235076
},
{
"key": "habitatBngDensity",
"baseline": 4.893665862785882
},
{
"key": "watercourseBngUnits",
"baseline": 0
},
{
"key": "watercourseBngDensity",
"baseline": 0
},
{
"key": "hedgerowBngUnits",
"baseline": 0
},
{
"key": "hedgerowBngDensity",
"baseline": 0
},
{
"key": "connectednessPercentage",
"baseline": 0.5463213719281186
},
{
"key": "unconnectedComponents",
"baseline": 41
},
{
"key": "largestConnectedArea",
"baseline": 208.01412512974605
},
{
"key": "coreToEdgePercentage",
"baseline": 0.3559652734682516
},
{
"key": "habitatCoverPercentage",
"baseline": 0.17096260916615935
},
{
"key": "winterCoverPercentage",
"baseline": ""
},
{
"key": "winterCoverHa",
"baseline": ""
},
{
"key": "floodzoneAreaHa",
"baseline": 44.75421814179502
},
{
"key": "floodzoneAreaPercentage",
"baseline": 0.021984240453942195
},
{
"key": "productiveFloodzoneAreaHa",
"baseline": 15.90925816637338
},
{
"key": "productiveFloodzoneAreaPercentage",
"baseline": 0.025375873034412133
}
...
]},
...
]};
DESCRIPTION
Request
URL: http://integration-api.thelandapp.com/nature-reporting/metrics/description
HTTP Method: GET
Parameters type: URL query params
Parameters:
apiKey – (mandatory) API key generated by Land App for your organisation
Example request:
Response
Response HTTP codes:
- 200 if all OK
- 400 if the request is wrong (including a message explaining why it is wrong)
- 500 if unhandled error on server-side occurs
Response model:
JSON
[
{
key: string,
name: string,
type: string,
variants: array,
description: string
decimalPlaces: number
},
…
];
Attributes in response:
Key | Data Type | Description |
key | string | A unique identifier for this metric. |
name | string | The end-user name of the metric |
type | string | The type in which the value should be displayed: FLOAT, PERCENTAGE, INTEGER, TEXT. See the table of possible values below. |
variants | array | All the possible variants for that metric: baseline, future (optional), uplift (optional). Future and Uplift, even if specified as options for the metric, may be empty values in the metrics API response, if the farmer hasn't shared a Land Management Plan, in which case a null/ N/a value should be given for both values. |
description | string | The human-readable description that explains the metric for end users |
decimalPlaces (optional) | number | Number of decimal places that the value should be rounded to and displayed at. |
Type values:
Data Type | Raw Format (API) | Display Logic for Land App Frontend | Example |
FLOAT | Decimal Number | Default: Round to 2 decimal places.
Override: If decimalPlaces property exists, use that value. | 15.678 → 15.6815.678 → 15.678 (if specified) |
PERCENTAGE | Decimal Fraction (can be above 1) | Multiply by 100 and suffix with % and display to 2 decimal places.
Override: If decimalPlaces property exists, use that value.
| 0.15 → 15% 1.25345 → 125.35% |
INTEGER | Whole Number | Display as is (no decimal). | 4 → 4 |
TEXT | String | Display as is. | "Good" → Good |
Example response:
JSON
[
{
key: 'habitatBngUnits',
name: 'Habitat BNG Units',
type: 'FLOAT',
variants: ['BASELINE', 'FUTURE', 'UPLIFT'],
description:
'Total BNG Units for the farm’s habitats, calculated using the statutory Biodiversity Unit Metric. It reflects the value habitats are likely to provide for native biodiversity.',
},
…
];