The legal submission of a Due Diligence Statement happens via the EU's TRACES NT v2 information system, not via eudr.dev. The engine produces the JSON receipt and (via the CLI) the TRACES-shaped XML; the operator submits using their own EU Login credentials.
The TRACES NT v2 submission API accepts a SOAP envelope with WS-Security UsernameToken-Digest authentication. The service is hosted at tracesnt.ec.europa.eu; the production service path is /tracesnt/ws/EUDRSubmissionServiceV2.
For the canonical wire format you should pull the live WSDL from your TRACES NT acceptance environment and treat that as the source of truth. Public documentation lags the actual service contract. The engine's offline export targets the XML shape currently described in the public ATIBT-hosted spec; flag any drift against the live WSDL when you onboard.
| Field | Source on the receipt | Notes |
|---|---|---|
| Operator identification | 1_operator | Name, EORI, address, role. |
| Activity type | activity_type (engine extension) | IMPORT / EXPORT / DOMESTIC / TRADE. These categories are a TRACES NT API construct — they predate Reg. (EU) 2025/2650 and are required on every submission. |
| Commodity HS code(s) | 2_product.hs_code | At least HS-6; HS-8 recommended for customs alignment. |
| Quantity | 2_product.quantity_kg + supplementary unit | |
| Country of production | 3_geolocation[].country | ISO-3166-1 alpha-2. |
| Geolocation (GeoJSON) | 3_geolocation[].plot_geojson | Polygon or point per the rules in geolocation-requirements. |
| Production time-range | 3_geolocation[].harvest_window | Free-text ISO 8601 date or interval. |
| Upstream DDS reference (when applicable) | engine extension upstream_dds[] | Annex II point 4 was deleted by Reg. 2025/2650, but the reference + verification code are still collected by TRACES outside the numbered Annex II body. |
The 25 MB upload limit applies to the entire payload (geometry-heavy submissions hit this quickly. The engine warns at 80 % of the limit).
eudr.dev receipteudr export-traces path/to/receipt.json --format official --activity IMPORT
produces the XML envelope in the EU IS v2 shape. Use --format soap to wrap it in a SOAP+WS-Security envelope with credentials from EUDR_TRACES_USERNAME + EUDR_TRACES_PASSWORD:
EUDR_TRACES_USERNAME=.. EUDR_TRACES_PASSWORD=.. \
eudr export-traces receipt.json --format soap --activity IMPORT
The output is ready to POST to the TRACES NT endpoint. The engine itself never POSTs on the operator's behalf. Submission is the operator's regulatory act under their EU Login identity.
On successful submission TRACES NT v2 assigns:
Store both on your side. The engine has a slot for them under signature.dds_ref_official so a re-issue of the printable report can show the TRACES reference next to the engine reference.
| Activity type | When to use |
|---|---|
IMPORT | Bringing the commodity into the EU customs territory from outside the bloc. The most common case. |
EXPORT | Sending the commodity out of the EU. The exporting operator files. |
DOMESTIC | Production + first market placement entirely inside one Member State. |
TRADE | Cross-EU intracom — moving a covered product from one Member State to another after first-place-on-market. |
eudr.dev defaults to IMPORT when the scenario doesn't specify, because that's the most common case in our sample set and the conservative interpretation under the regulation.