The API does what the checker does, for programs: an ERP that checks supplier files as they arrive, a pipeline that fixes and saves them, a script that files the statement. It runs the same rules, fixes and converter as the web checker, so a file comes out the same either way. The whole API is described in OpenAPI 3.1 at /api/v1/openapi.json; point a client generator at it.

Keys

Create a key in Settings → API and MCP (Team or Consultant plan). Send it on every request:

Authorization: Bearer eudr_…

A key works in one workspace, with the role of the member who created it: a viewer's key can read projects but not save them. If that member leaves the workspace, the key stops working. Only a hash of the key is stored; it is shown once, when you create it.

Limits

Each plan with the API has a number of requests a minute, counted per billing workspace, and the plan's monthly allowance of distinct plots, shared with saved projects and supplier uploads. A plot counts once a month however often you send it. Every response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset; a 429 also carries Retry-After. GET /me shows both allowances.

Sending files

The examples use $EUDR_API for the base URL at the top of the reference and $EUDR_KEY for your key. Send the file as the body, or as multipart/form-data when it has several parts (a shapefile's .shp, .dbf and .prj). Options go in the query string.

curl -H "Authorization: Bearer $EUDR_KEY" \
  --data-binary @plots.geojson \
  "$EUDR_API/validate?commodity=cocoa"

curl -H "Authorization: Bearer $EUDR_KEY" \
  -F file=@farms.shp -F file=@farms.dbf -F file=@farms.prj \
  $EUDR_API/convert

Largest file: 50 MB. A GeoJSON file compresses about tenfold, so send large ones gzip-compressed with Content-Encoding: gzip.

Files sent to /validate, /fix, /convert, /report and /forest are processed in memory and not stored. Nothing from them is logged. Only the project endpoints store a file, as a saved version. For files that must not leave your computer at all, use the command-line tool.

Errors

Every error has the same shape, with a stable code to branch on and a message to show a person:

{ "error": { "code": "crs_required", "message": "…", "details": { "crsCandidates": […] } }, "requestId": "…" }

Reference

Base URL: https://eudrplot.com/api/v1 · OpenAPI 3.1: openapi.json

Files

Stateless: the file is processed and not stored.

POST /validate

Check a file. Every problem the Information System would reject the file for, and the weaker points of its evidence, with how to fix each. Non-GeoJSON files are converted first.

ParameterInDescription
filename optionalqueryThe file's name, when sending raw bytes; its extension tells the format. Default plots.geojson.
commodity optionalqueryThe commodity. Only cattle changes the result. One of: cattle, cocoa, coffee, oil-palm, rubber, soya, wood.
crs optionalqueryThe coordinate system when the file does not declare it, e.g. EPSG:32630.
country optionalqueryISO alpha-2 country of the plots, so unlabelled UTM can be recognised.
features optionalqueryInclude the per-plot table. Default true.

Body: The file: its raw bytes as the body (GeoJSON, KML, KMZ, GPX, CSV or a zipped shapefile), or multipart/form-data with one or more files (a shapefile's .shp, .dbf and .prj). Content-Encoding: gzip is accepted. Largest file: 50 MB decompressed.

Responses:

  • 200 OK ValidationResult
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 413 The file is too large.
  • 415 Not a file format the checker reads.
  • 422 The file could not be converted (e.g. crs_required, with likely EPSG codes), or the Information System refused it.
  • 423 The workspace is read-only: payment is overdue.
  • 429 Rate limit reached; see Retry-After.
curl -X POST "https://eudrplot.com/api/v1/validate" \
  -H "Authorization: Bearer $EUDR_KEY" \
  --data-binary @plots.geojson

POST /fix

Fix a file. Applies the automatic fixes, re-checks, and returns the fixed GeoJSON with a change log of every change (hectares before and after for geometry). Fixes that change a plot's area need acceptGeometryChanges and never pass the area guard.

ParameterInDescription
filename optionalqueryThe file's name, when sending raw bytes; its extension tells the format. Default plots.geojson.
fixes optionalqueryComma-separated fix ids. Default: every bulk-safe fix.
acceptGeometryChanges optionalqueryAllow fixes that change a plot's measured area (within the 2% guard).
commodity optionalqueryThe commodity. Only cattle changes the result. One of: cattle, cocoa, coffee, oil-palm, rubber, soya, wood.
crs optionalqueryThe coordinate system when the file does not declare it, e.g. EPSG:32630.
country optionalqueryISO alpha-2 country of the plots, so unlabelled UTM can be recognised.
output optionalqueryfile: answer with the GeoJSON itself instead of JSON. One of: json, file.

Body: The file: its raw bytes as the body (GeoJSON, KML, KMZ, GPX, CSV or a zipped shapefile), or multipart/form-data with one or more files (a shapefile's .shp, .dbf and .prj). Content-Encoding: gzip is accepted. Largest file: 50 MB decompressed.

Responses:

  • 200 The fixed file and what was done, or with output=file the GeoJSON itself (X-Changes-Applied, X-Fixes-Skipped and X-Errors-Remaining headers). FixResult
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 413 The file is too large.
  • 415 Not a file format the checker reads.
  • 422 The file could not be converted (e.g. crs_required, with likely EPSG codes), or the Information System refused it.
  • 423 The workspace is read-only: payment is overdue.
  • 429 Rate limit reached; see Retry-After.
curl -X POST "https://eudrplot.com/api/v1/fix" \
  -H "Authorization: Bearer $EUDR_KEY" \
  --data-binary @plots.geojson

POST /convert

Convert to GeoJSON. KML, KMZ, GPX, CSV or a shapefile to GeoJSON in WGS 84 degrees, with every decision listed. A file whose coordinate system cannot be determined gets 422 crs_required with the likely EPSG codes in details.crsCandidates.

ParameterInDescription
filename optionalqueryThe file's name, when sending raw bytes; its extension tells the format. Default plots.geojson.
crs optionalqueryThe coordinate system when the file does not declare it, e.g. EPSG:32630.
country optionalqueryISO alpha-2 country of the plots, so unlabelled UTM can be recognised.
output optionalqueryfile: answer with the GeoJSON itself instead of JSON. One of: json, file.

Body: The file: its raw bytes as the body (GeoJSON, KML, KMZ, GPX, CSV or a zipped shapefile), or multipart/form-data with one or more files (a shapefile's .shp, .dbf and .prj). Content-Encoding: gzip is accepted. Largest file: 50 MB decompressed.

Responses:

  • 200 The GeoJSON and the conversion notes, or with output=file the GeoJSON itself. ConvertResult
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 413 The file is too large.
  • 415 Not a file format the checker reads.
  • 422 The file could not be converted (e.g. crs_required, with likely EPSG codes), or the Information System refused it.
  • 423 The workspace is read-only: payment is overdue.
  • 429 Rate limit reached; see Retry-After.
curl -X POST "https://eudrplot.com/api/v1/convert" \
  -H "Authorization: Bearer $EUDR_KEY" \
  --data-binary @plots.geojson

POST /report

PDF report. The PDF validation report the checker produces, stamped with the file's SHA-256 and the rule-set version. Optionally after the safe fixes and with the forest section.

ParameterInDescription
filename optionalqueryThe file's name, when sending raw bytes; its extension tells the format. Default plots.geojson.
fix optionalqueryApply the bulk-safe fixes first; the report includes the change log.
forest optionalqueryInclude forest cover in 2020 and tree cover loss since.
commodity optionalqueryThe commodity. Only cattle changes the result. One of: cattle, cocoa, coffee, oil-palm, rubber, soya, wood.
crs optionalqueryThe coordinate system when the file does not declare it, e.g. EPSG:32630.
country optionalqueryISO alpha-2 country of the plots, so unlabelled UTM can be recognised.

Body: The file: its raw bytes as the body (GeoJSON, KML, KMZ, GPX, CSV or a zipped shapefile), or multipart/form-data with one or more files (a shapefile's .shp, .dbf and .prj). Content-Encoding: gzip is accepted. Largest file: 50 MB decompressed.

Responses:

  • 200 The PDF. X-File-Sha256, X-Errors and X-Warnings headers.
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 413 The file is too large.
  • 415 Not a file format the checker reads.
  • 422 The file could not be converted (e.g. crs_required, with likely EPSG codes), or the Information System refused it.
  • 423 The workspace is read-only: payment is overdue.
  • 429 Rate limit reached; see Retry-After.
  • 502 A service we depend on (a forest map, the Information System) did not answer.
curl -X POST "https://eudrplot.com/api/v1/report" \
  -H "Authorization: Bearer $EUDR_KEY" \
  --data-binary @plots.geojson

POST /forest

Forest cover 2020 and loss since. Per plot: the share that was forest on 31 December 2020 on the JRC's GFC2020 V4 map, and tree cover lost since 2021 on land that was forest in 2020 (Hansen GFC v1.13). Risk indicators for the operator's own assessment, not a verdict. Only fixed map squares are requested from the map servers.

ParameterInDescription
filename optionalqueryThe file's name, when sending raw bytes; its extension tells the format. Default plots.geojson.
crs optionalqueryThe coordinate system when the file does not declare it, e.g. EPSG:32630.
country optionalqueryISO alpha-2 country of the plots, so unlabelled UTM can be recognised.

Body: The file: its raw bytes as the body (GeoJSON, KML, KMZ, GPX, CSV or a zipped shapefile), or multipart/form-data with one or more files (a shapefile's .shp, .dbf and .prj). Content-Encoding: gzip is accepted. Largest file: 50 MB decompressed.

Responses:

  • 200 OK ForestResult
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 413 The file is too large.
  • 415 Not a file format the checker reads.
  • 422 The file could not be converted (e.g. crs_required, with likely EPSG codes), or the Information System refused it.
  • 423 The workspace is read-only: payment is overdue.
  • 429 Rate limit reached; see Retry-After.
  • 502 A service we depend on (a forest map, the Information System) did not answer.
curl -X POST "https://eudrplot.com/api/v1/forest" \
  -H "Authorization: Bearer $EUDR_KEY" \
  --data-binary @plots.geojson

Reference

Rules and fixes.

GET /rules

List the rules.

Responses:

  • 200 OK object
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 429 Rate limit reached; see Retry-After.
curl "https://eudrplot.com/api/v1/rules" \
  -H "Authorization: Bearer $EUDR_KEY"

GET /rules/{id}

One rule, by id or slug.

ParameterInDescription
idpath

Responses:

  • 200 OK Rule
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 404 Not found in this workspace.
  • 429 Rate limit reached; see Retry-After.
curl "https://eudrplot.com/api/v1/rules/PROJECT_ID" \
  -H "Authorization: Bearer $EUDR_KEY"

GET /fixes

List the automatic fixes.

Responses:

  • 200 OK object
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 429 Rate limit reached; see Retry-After.
curl "https://eudrplot.com/api/v1/fixes" \
  -H "Authorization: Bearer $EUDR_KEY"

Projects

Saved files with version history.

GET /projects

List projects.

Responses:

  • 200 OK object
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 429 Rate limit reached; see Retry-After.
curl "https://eudrplot.com/api/v1/projects" \
  -H "Authorization: Bearer $EUDR_KEY"

POST /projects

Create a project from a file. Saves the file as version 1 (converted to GeoJSON first if needed). Counts its plots toward the month's allowance.

ParameterInDescription
name optionalqueryProject name. Default: the file name.
filename optionalqueryThe file's name, when sending raw bytes; its extension tells the format. Default plots.geojson.
crs optionalqueryThe coordinate system when the file does not declare it, e.g. EPSG:32630.
country optionalqueryISO alpha-2 country of the plots, so unlabelled UTM can be recognised.

Body: The file: its raw bytes as the body (GeoJSON, KML, KMZ, GPX, CSV or a zipped shapefile), or multipart/form-data with one or more files (a shapefile's .shp, .dbf and .prj). Content-Encoding: gzip is accepted. Largest file: 50 MB decompressed.

Responses:

  • 201 Created object
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 413 The file is too large.
  • 415 Not a file format the checker reads.
  • 422 The file could not be converted (e.g. crs_required, with likely EPSG codes), or the Information System refused it.
  • 423 The workspace is read-only: payment is overdue.
  • 429 Rate limit reached; see Retry-After.
curl -X POST "https://eudrplot.com/api/v1/projects" \
  -H "Authorization: Bearer $EUDR_KEY" \
  --data-binary @plots.geojson

GET /projects/{id}

A project, its versions and statements.

ParameterInDescription
idpath

Responses:

  • 200 OK object
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 404 Not found in this workspace.
  • 429 Rate limit reached; see Retry-After.
curl "https://eudrplot.com/api/v1/projects/PROJECT_ID" \
  -H "Authorization: Bearer $EUDR_KEY"

POST /projects/{id}/versions

Save a new version.

ParameterInDescription
idpath
filename optionalqueryThe file's name, when sending raw bytes; its extension tells the format. Default plots.geojson.
crs optionalqueryThe coordinate system when the file does not declare it, e.g. EPSG:32630.
country optionalqueryISO alpha-2 country of the plots, so unlabelled UTM can be recognised.

Body: The file: its raw bytes as the body (GeoJSON, KML, KMZ, GPX, CSV or a zipped shapefile), or multipart/form-data with one or more files (a shapefile's .shp, .dbf and .prj). Content-Encoding: gzip is accepted. Largest file: 50 MB decompressed.

Responses:

  • 201 Created object
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 404 Not found in this workspace.
  • 409 Nothing changed since the last version.
  • 413 The file is too large.
  • 415 Not a file format the checker reads.
  • 422 The file could not be converted (e.g. crs_required, with likely EPSG codes), or the Information System refused it.
  • 423 The workspace is read-only: payment is overdue.
  • 429 Rate limit reached; see Retry-After.
curl -X POST "https://eudrplot.com/api/v1/projects/PROJECT_ID/versions" \
  -H "Authorization: Bearer $EUDR_KEY" \
  --data-binary @plots.geojson

GET /projects/{id}/versions/{number}

Download a version's file.

ParameterInDescription
idpath
numberpathVersion number, or current.

Responses:

  • 200 The GeoJSON. X-Version and X-File-Sha256 headers.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 404 Not found in this workspace.
  • 429 Rate limit reached; see Retry-After.
curl "https://eudrplot.com/api/v1/projects/PROJECT_ID/versions/current" \
  -H "Authorization: Bearer $EUDR_KEY"

Statements

Due diligence statements in the EU Information System.

GET /projects/{id}/dds

Statements filed from a project.

ParameterInDescription
idpath

Responses:

  • 200 OK object
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 404 Not found in this workspace.
  • 429 Rate limit reached; see Retry-After.
curl "https://eudrplot.com/api/v1/projects/PROJECT_ID/dds" \
  -H "Authorization: Bearer $EUDR_KEY"

POST /projects/{id}/dds

File a due diligence statement. Files a statement with the EU Information System (TRACES) from the project's current version, through the workspace's connection (Settings → EU Information System). Plots are grouped into producers. Checked against the Commission's rules before anything is sent. Reference and verification numbers arrive later: poll GET /dds/{id}.

ParameterInDescription
idpath

Body: StatementRequest

Responses:

  • 201 Filed object
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 404 Not found in this workspace.
  • 422 The file could not be converted (e.g. crs_required, with likely EPSG codes), or the Information System refused it.
  • 423 The workspace is read-only: payment is overdue.
  • 429 Rate limit reached; see Retry-After.
  • 502 A service we depend on (a forest map, the Information System) did not answer.
curl -X POST "https://eudrplot.com/api/v1/projects/PROJECT_ID/dds" \
  -H "Authorization: Bearer $EUDR_KEY" \
  -H "Content-Type: application/json" \
  --data @statement.json

GET /dds/{id}

A statement and its status. Fetches the status from the Information System when allowed (30 minutes after filing, then every 5 minutes) and the statement still waits for its numbers, or with refresh=true.

ParameterInDescription
idpath
refresh optionalqueryFetch the status even when the numbers are known.

Responses:

  • 200 OK object
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 404 Not found in this workspace.
  • 429 Rate limit reached; see Retry-After.
  • 502 A service we depend on (a forest map, the Information System) did not answer.
curl "https://eudrplot.com/api/v1/dds/STATEMENT_ID" \
  -H "Authorization: Bearer $EUDR_KEY"

POST /dds/{id}/withdraw

Withdraw a statement (within 72 hours).

ParameterInDescription
idpath

Responses:

  • 200 OK object
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 404 Not found in this workspace.
  • 422 The file could not be converted (e.g. crs_required, with likely EPSG codes), or the Information System refused it.
  • 429 Rate limit reached; see Retry-After.
  • 502 A service we depend on (a forest map, the Information System) did not answer.
curl -X POST "https://eudrplot.com/api/v1/dds/STATEMENT_ID/withdraw" \
  -H "Authorization: Bearer $EUDR_KEY"

Monitoring

Weekly deforestation alerts on monitored projects, grouped into events and scored: confirmed, likely, unconfirmed or not relevant.

GET /projects/{id}/monitoring

Whether a project is monitored.

ParameterInDescription
idpath

Responses:

  • 200 OK object
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 404 Not found in this workspace.
  • 429 Rate limit reached; see Retry-After.
curl "https://eudrplot.com/api/v1/projects/PROJECT_ID/monitoring" \
  -H "Authorization: Bearer $EUDR_KEY"

PUT /projects/{id}/monitoring

Switch weekly monitoring on or off. On: the project's current version is checked within ten minutes, then every Monday from 04:00 UTC, and again whenever a new version is saved. Counts the version's plots against the plan's monitored plots.

ParameterInDescription
idpath

Body: object

Responses:

  • 200 OK object
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 404 Not found in this workspace.
  • 423 The workspace is read-only: payment is overdue.
  • 429 Rate limit reached; see Retry-After.
curl -X PUT "https://eudrplot.com/api/v1/projects/PROJECT_ID/monitoring" \
  -H "Authorization: Bearer $EUDR_KEY" \
  -H "Content-Type: application/json" \
  --data '{"on": true}'

GET /alerts

Deforestation alerts. One case per plot with alerts on 2020 forest. An alert is an indicator to review, not a finding of deforestation.

ParameterInDescription
status optionalqueryopen (default: new and reviewing), all, set_aside, new, reviewing, dismissed or confirmed.
project optionalqueryOnly this project's alerts.

Responses:

  • 200 OK object
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 429 Rate limit reached; see Retry-After.
curl "https://eudrplot.com/api/v1/alerts" \
  -H "Authorization: Bearer $EUDR_KEY"

GET /alerts/{id}

An alert and its history.

ParameterInDescription
idpath

Responses:

  • 200 OK object
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 404 Not found in this workspace.
  • 429 Rate limit reached; see Retry-After.
curl "https://eudrplot.com/api/v1/alerts/ALERT_ID" \
  -H "Authorization: Bearer $EUDR_KEY"

POST /alerts/{id}/status

Record a review. reviewing, or dismissed or confirmed with a note saying what was looked at and found. The note is kept with the alert for five years.

ParameterInDescription
idpath

Body: object

Responses:

  • 200 OK object
  • 400 Bad request: a wrong option or an unreadable body.
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 404 Not found in this workspace.
  • 423 The workspace is read-only: payment is overdue.
  • 429 Rate limit reached; see Retry-After.
curl -X POST "https://eudrplot.com/api/v1/alerts/ALERT_ID/status" \
  -H "Authorization: Bearer $EUDR_KEY" \
  -H "Content-Type: application/json" \
  --data '{"status": "dismissed", "note": "What you looked at and found"}'

Account

The key's workspace, plan and allowance.

GET /me

The key's workspace, plan and allowance.

Responses:

  • 200 OK Me
  • 401 The key is missing, wrong or revoked.
  • 402 The plan does not include this, or the month's plot allowance would be exceeded.
  • 429 Rate limit reached; see Retry-After.
curl "https://eudrplot.com/api/v1/me" \
  -H "Authorization: Bearer $EUDR_KEY"

Schemas

Error

FieldTypeDescription
errorobject
FieldTypeDescription
codestringStable, machine-readable: invalid_key, plan_required, rate_limited, too_large, crs_required, not_found…
messagestringA sentence for a person.
details optionalobjectExtra data for some codes, e.g. crsCandidates.
requestIdstringQuote it to support.

Severity

error: the Information System rejects the file. warning: a likely problem. info: advice.

string: error, warning, info

OffsetRange

object or null

Position

object or null

Diagnostic

FieldTypeDescription
ruleIdstringPermanent rule id, e.g. GEOM-003.
slugstringThe rule's page: /errors/{slug}.
severitySeverity
titlestring
messagestringSpecific to this finding.
whyItMattersstring
howToFixstring
fixablebooleanAn automatic fix exists for the rule.
fixIdstring or null
featureIndexinteger or null
jsonPathstringJSON pointer to the offending value.
offsetOffsetRange
positionPosition
ringIndex optionalinteger or null
vertexIndex optionalinteger or null
location optionalnumber[] or null
sourcesstring[]Official sources, as ids from the rule reference.
dataobject
docsUrl optionalstring

Summary

FieldTypeDescription
errorsinteger
warningsinteger
infosinteger
featureCountintegerPlots in the file.
vertexCountinteger
byteSizeinteger
variantstringType I or Type II file (EUDR GeoJSON File Description). One of: type-i, type-ii, unknown.
passesbooleanTrue when there is no error-severity finding.

Plot

FieldTypeDescription
indexinteger
jsonPath optionalstring
geometryTypestring or null
producerNamestring or null
producerCountrystring or null
productionPlace optionalstring or null
declaredArea optionalanyThe Area property as found.
computedAreaHanumber or null
bboxnumber[] or null
vertexCountinteger

Conversion

FieldTypeDescription
formatstringSource format. One of: kml, kmz, gpx, csv, shapefile, geojson.
featureCountinteger
crsobject or null
reprojectedboolean
notesobject[]Every decision the converter made.

ValidationResult

FieldTypeDescription
filestring
fileHashstringSHA-256 of the checked GeoJSON, hex.
ruleSetVersionstring
checkedAtstring (date-time)
summarySummary
diagnosticsDiagnostic[]
diagnosticsTruncated optionalintegerHow many findings were left out, when capped.
features optionalPlot[]Per-plot table; omitted with features=false.
conversion optionalConversion

ChangeLog

FieldTypeDescription
generatedAtstring (date-time)
ruleSetVersionstring
sourceHash optionalstring
resultHash optionalstring
filename optionalstring
entriesobject[]
skippedobject[]Fixes not applied, and why. Never silently dropped.
summaryobject
FieldTypeDescription
changesAppliedinteger
fixesSkippedinteger
plotsAffectedinteger
areaChangeHanumberNet change in measured hectares.

ConvertResult

FieldTypeDescription
conversionConversion or null
textstringGeoJSON in WGS 84 degrees.

Rule

FieldTypeDescription
idstring
slugstring
severitySeverity
categorystring One of: file, structure, coordinates, geometry, properties, plausibility.
titlestring
whyItMattersstring
howToFixstring
fixableboolean
fixAltersGeometry optionalboolean
sourcesstring[]
specVersion optionalstring
lastVerified optionalstring (date)
docsUrl optionalstring

Fix

FieldTypeDescription
idstring
titlestring
descriptionstring
kindstring One of: patch.
bulkSafebooleanApplied by default.
altersGeometryboolean
areaPromisestringWhat the fix promises about area; the guard enforces it. One of: none, unchanged, expected, review.
ruleIdsstring[]

Dataset

FieldTypeDescription
namestring
versionstring
doistring
licencestring
citationstring
urlstring

ForestResult

FieldTypeDescription
file optionalstring
checkedAt optionalstring (date-time)
datasetDataset
lossDataset optionalDataset
indicatorstring
reviewSharenumberForest share at or above which a plot is flagged for review.
summaryobject
FieldTypeDescription
plotsinteger
checkedinteger
noneinteger
lowinteger
reviewinteger
notCheckedinteger
forestHanumber
sampledHanumber
loss optionalobject
FieldTypeDescription
checkedinteger
none optionalinteger
low optionalinteger
reviewintegerPlots that lost at least reviewHa of 2020 forest since 2021.
lossHa optionalnumber
forestLossHanumber
byYearobject
notChecked optionalinteger
tiles optionalinteger
reviewHanumber
plotsobject[]

Project

FieldTypeDescription
idstring
namestring
currentVersioninteger
plotCount optionalinteger or null
errorCount optionalinteger or null
warningCount optionalinteger or null
createdAtstring (date-time)
updatedAtstring (date-time)

Version

FieldTypeDescription
numberinteger
filenamestring
sha256string
byteSizeinteger
plotCountinteger
errorCountinteger
warningCountinteger
ruleSetVersionstring
notestring
createdAtstring (date-time)

Statement

FieldTypeDescription
idstring
projectId optionalstring or null
projectNamestring
versionNumberinteger
environmentstring One of: acceptance, production.
uuidstringAssigned by the Information System.
internalReference optionalstring or null
referenceNumber optionalstring or null
verificationNumber optionalstring or null
statusstringEudrStatusType: SUBMITTED, AVAILABLE, REJECTED, WITHDRAWN, ARCHIVED, GROUPED, OBSOLETE.
rejectionReason optionalstring or null
activityType optionalstring One of: IMPORT, EXPORT, DOMESTIC.
summary optionalobject
submittedAtstring (date-time)
statusCheckedAt optionalstring (date-time) or null
nextStatusCheckAt optionalstring (date-time) or null
withdrawnAt optionalstring (date-time) or null

StatementRequest

FieldTypeDescription
confirmtrueConfirms that you file this statement as the operator or trader, or for them, and that due diligence was exercised (Regulation (EU) 2023/1115, Art. 4(2) and 4(3)).
activityTypestring One of: IMPORT, EXPORT, DOMESTIC.
operatorRole optionalstring One of: OPERATOR, REPRESENTATIVE_OPERATOR.
representedOperator optionalobjectWith REPRESENTATIVE_OPERATOR: the operator you file for.
FieldTypeDescription
namestring
identifierTypestring
identifierValuestring
eori optionalstring
countrystring
street optionalstring
postalCode optionalstring
city optionalstring
email optionalstring
phone optionalstring
countryOfActivity optionalstringEU Member State, ISO alpha-2.
borderCrossCountry optionalstringEU Member State of entry or exit (import and export).
internalReference optionalstring
comment optionalstring
geoLocationConfidential optionalboolean
commoditiesobject[]At most 100.

Me

FieldTypeDescription
workspaceobject
FieldTypeDescription
idstring
namestring
keyobject
FieldTypeDescription
idstring
namestring
prefixstring
rolestring One of: owner, admin, member, viewer.
planobject
FieldTypeDescription
idstring
namestring
readOnlyboolean
usageobject
FieldTypeDescription
monthstringYYYY-MM
plotsintegerDistinct plots metered this month.
plotLimitinteger or null
rateLimitobject
FieldTypeDescription
perMinuteinteger
remaininginteger
resetSecondsinteger

AlertStatus

new: not looked at. reviewing: someone is on it. dismissed: not deforestation after 2020, with the reason. confirmed: deforestation after 2020 on the plot.

string: new, reviewing, dismissed, confirmed

AlertConfidence

How sure the evidence makes us, apart from a person's review. confirmed: two or more independent sources agree, or Sentinel-2 or Sentinel-1 imagery shows the clearing. likely: one source with high confidence that has held, no clear image yet. unconfirmed: one low-confidence source, or the imagery shows no change. not_relevant: set aside (before the cut-off, not forest in 2020, minor, or along the plot's edge). Only confirmed and likely are emailed and sent to webhooks.

string: confirmed, likely, unconfirmed, not_relevant

AlertImageryCheck

FieldTypeDescription
verdictstringdrop: the clearing shows inside while the land around is stable. no_change: it does not, or everything changed alike. unclear: no clear image yet. One of: drop, no_change, unclear.
beforeobject or null
afterobject[]

AlertSystem

radd: RADD (WUR), Sentinel-1 radar, 10 m. glads2: GLAD-S2 (UMD), Sentinel-2, 10 m. dist: DIST-ALERT (UMD, NASA), Landsat and Sentinel-2, 30 m.

string: radd, glads2, dist

Alert

FieldTypeDescription
idstring
projectIdstring
projectNamestring
supplierobject or null
versionintegerThe project version the plot was last checked in.
plotinteger1-based plot number in that version.
placestring or null
producerstring or null
statusAlertStatus
statusNotestring or null
statusAtstring (date-time) or null
systemAlertSystem
systemsAlertSystem[]Every system that watches part of the plot, in order of preference (RADD, GLAD-S2, DIST-ALERT).
forestAlertHanumberAlerts after 2020 on land the JRC mapped as forest in 2020, hectares.
highConfidenceHanumberOf those, high confidence.
alertHanumberAll alerts after 2020 inside the plot, hectares.
sampledHanumber
firstDatestring (date)Earliest alert on 2020 forest.
lastDatestring (date)Latest alert on 2020 forest.
centernumber[][longitude, latitude] of the alerts on 2020 forest.
bboxnumber[][west, south, east, north] of the alerts on 2020 forest.
reopenedAtstring (date-time) or null
firstSeenAtstring (date-time)
lastSeenAtstring (date-time)
confidenceAlertConfidence
eventsobject[]The plot's alerts grouped into events, each with its evidence. NDVI for optical, VH backscatter in dB for radar; inside the event and in a ring of land around it.
imagesobject or null

AlertEvent

FieldTypeDescription
kindstringdetected, grew (newer alerts), reopened, status (a person's review), or confidence (the evidence changed the confidence). One of: detected, grew, reopened, status, confidence.
statusAlertStatus or null
notestring or null
bystring or null
forestAlertHanumber or null
lastDatestring or null
atstring (date-time)

Monitoring

FieldTypeDescription
onboolean
enabledAtstring (date-time) or null
checkedVersioninteger or null
checkedAtstring (date-time) or null
pausedReasonstring or null
pendingbooleanA check is queued.
openAlertsinteger

MonitoringUsage

FieldTypeDescription
usedintegerPlots watched across the workspace and its client workspaces.
limitinteger or null