EUDR Audit Trail
The working surface for an EUDR Due Diligence Statement. An audit
record is the editable draft you build, refine, and version before
filing — everything here happens at /regulations/eudr/audit-trail.
When you're satisfied, you submit it (see Due Diligence
Statement) and it becomes a filed DDS.
Think of a record as a living dossier: a set of plots, the deforestation and legality assessments behind them, the operator and commodity details, and the operator's decisions (exclusions, justifications, compliance overrides) — all snapshotted into immutable versions and backed by an append-only audit log.
▶How a record is structured
- Record — the top-level dossier (
:recordId). Carries the operator block, name, and config. - Version — an immutable snapshot of the plots + assessments + deforestation metric at the moment it was cut. The newest is the current version; older ones stay readable for audit/diff.
- Config — operator decisions that shape the package: exclusions, justifications, compliance overrides, suppliers, report data fields.
▶What you can do here
| Area | What it's for | When you'd use it |
|---|---|---|
| Get DDS Record | Fetch the record, current version, and completeness | Check readiness before submit |
| Update DDS Record | Set/patch the operator and commodity blocks and the record name | Fill in details the fast path left blank |
| Patch DDS Config | Bulk-edit exclusions and justifications in one call | Triage many plots at once |
| Plots | Read which plots the package will use, which are excluded, and which are newly unaccounted | Review and curate the plot set |
| Versions | Read historic version snapshots and their plots | Audit or diff past submissions |
| Suppliers | Per-DDS supplier rollup + override (pinned to this record) | Correct supplier identity for one DDS |
| Data Fields | Project arbitrary upload columns into the report's per-plot data_fields | Carry custom attributes into the report |
| Authorisations | Record the operator's "submit on my behalf" acknowledgement | Required before on-behalf-of TRACES submission |
| Audit Log | Append-only history of every create/edit/submit action | Regulatory audit, change traceability |
| Report | Export the DDS report (JSON or GeoJSON) | Preview the package before filing |
| Reprocess | Cut a new version against fresh assessments / a new end_date | Sourcing changed and the snapshot is stale |
| Get Traces Overview | Live TRACES overview alongside the stored value | Check what TRACES says right now, not just the last sweep |
| Get Traces Statement | The full as-filed statement TRACES holds | Audit/compare against fm-api's local copy |
▶Typical flow
- Create the record (fast path on ingestion, or Create Audit Trail).
- Fill in operator + commodity via Update DDS Record.
- Curate the plot set — exclude plots that don't belong, attach findings and compliance overrides where needed.
- Preview with the Report.
- Authorise and submit (see Due Diligence Statement).
- Reprocess later if the underlying data changes.
The whole record lifecycle is captured in the Audit Log — exclusions, justifications, version cuts, and submission state transitions are all immutable events you can replay for an auditor.
Required scope: eudr:read for reads, eudr:write for edits.
Records are org-scoped — another org's record returns 404.