EUDR Due Diligence Statement (DDS)

A Due Diligence Statement is a submitted audit record β€” the artifact filed with EU TRACES. This /dds namespace now exposes a single action: submitting a record (the bridge that moves it from working draft to filed DDS).

Reading records β€” both working drafts and submitted statements β€” moved to the unified Audit Trail surface at /regulations/eudr/audit-trail:

  • List records at GET /audit-trail; add ?status=submitted for the filed-only view that used to live at GET /dds. unaccounted_plot_count is opt-in on the list β€” pass ?include=unaccounted_plot_count to compute it (it is expensive on large orgs and omitted by default).
  • Get a single record at GET /audit-trail/:recordId (Get Audit Record Summary); its lifecycle_status tells you whether it's been filed.

You build and refine an audit record under Audit Trail, then submit it here, at which point it becomes a DDS and shows up in GET /audit-trail?status=submitted.

build & refine             file                          read back
───────────────            ────                          ─────────
/audit-trail/*  ──submit──▢  POST /dds/:id/submit  ──▢  GET /audit-trail?status=submitted
                                                        GET /audit-trail/:id

Endpoints

MethodPathDescription
POST/dds/:recordId/submitFile the record's current version with TRACES (sync manual or async submit)
POST/dds/lookupLook up a DDS by internal reference (own filing) or reference/verification numbers (third party)

The retired GET /dds and GET /dds/:recordId reads are now GET /audit-trail?status=submitted and GET /audit-trail/:recordId.

Reading back what TRACES holds

Submitting is one direction; Lookup DDS and the Audit Trail Get Traces Overview / Get Traces Statement endpoints are the other β€” a live read-through to what TRACES itself says about a filing, rather than only what fm-api last stored.

Multi-org

Visibility is a single rule: dds_record.organization_id ∈ ctx.effectiveOrgIds. Records produced under one org are invisible to another and return 404.

Errors

StatusCodeWhen
401UNAUTHORIZEDMissing/invalid API key
404NOT_FOUNDrecordId isn't visible to the caller

Required scope: submission is documented on Submit DDS. /dds/lookup requires eudr:verify, not eudr:read β€” see Lookup DDS.