DDS Migration: V1 to V4¶
Detailed field-by-field mapping
For a complete field-level mapping, see DDS Field-Level Mapping V1→V4.
V1 Submission: EUDRSubmissionServiceV1 — /tracesnt/ws/EUDRSubmissionServiceV1
V1 Retrieval: EUDRRetrievalServiceV1 — /tracesnt/ws/EUDRRetrievalServiceV1
V4 (unified): EUDRDueDiligenceStatementServiceV4 — /tracesnt/ws/EUDRDueDiligenceStatementServiceV4
Key change: V4 consolidates submission and retrieval into a single service.
Namespace change:
http://ec.europa.eu/tracesnt/certificate/eudr/submission/v1 → http://ec.europa.eu/tracesnt/certificate/eudr/due-diligence-statement/v4
http://ec.europa.eu/tracesnt/certificate/eudr/retrieval/v1 → merged into the above
http://ec.europa.eu/tracesnt/certificate/eudr/model/v1 → http://ec.europa.eu/tracesnt/certificate/eudr/common/v4 (shared types)
Operation changes¶
| V1 Service | V1 Operation | V4 Operation | Change |
|---|---|---|---|
| Submission | submitDds |
submitDds |
Request/response types renamed; operatorRole replaces operatorType |
| Submission | amendDds |
amendDds |
Request/response types renamed |
| Submission | retractDds |
withdrawDds |
Renamed from retract to withdraw |
| Retrieval | getDdsInfo |
getDds |
Renamed; moved to DDS service. Returns overview data only |
| Retrieval | getDdsInfoByInternalReferenceNumber |
getDdsByInternalReference |
Renamed; moved to DDS service. Returns overview data only |
| Retrieval | getStatementByIdentifiers |
getDdsByIdentifiers |
Renamed; moved to DDS service. In V4 this operation no longer returns content — it always returns a NotFoundException fault ("Statement detail access is possible only over UI"). Detail retrieval is UI-only |
Request/Response type changes¶
Submission operations¶
| V1 | V4 | Notes |
|---|---|---|
SubmitStatementRequest |
SubmitDdsRequest |
Renamed; adds operatorRole replacing operatorType; values reduced to OPERATOR / REPRESENTATIVE_OPERATOR |
SubmitStatementResponse |
SubmitDdsResponse |
Field renamed: ddsIdentifier → uuid |
AmendStatementRequest |
AmendDdsRequest |
Field renamed: ddsIdentifier → uuid |
AmendStatementResponse |
AmendDdsResponse |
Now returns uuid and status (lifecycle status, e.g. AVAILABLE) instead of HTTP status string |
RetractStatementRequest |
WithdrawDdsRequest |
Operation + type renamed; field ddsIdentifier → uuid |
RetractStatementResponse |
WithdrawDdsResponse |
Now returns uuid and status (lifecycle status, e.g. WITHDRAWN) instead of HTTP status string |
Retrieval operations (new in V4 DDS service)¶
| V1 | V4 | Notes |
|---|---|---|
GetStatementInfoRequest |
GetDdsRequest |
Renamed; accepts up to 100 UUIDs |
GetStatementInfoResponse |
GetDdsResponse |
Renamed; uses OverviewType from common XSD |
GetDdsInfoByInternalReferenceNumberRequest |
GetDdsByInternalReferenceRequest |
Renamed |
GetDdsInfoByInternalReferenceNumberResponse |
GetDdsByInternalReferenceResponse |
Renamed |
GetStatementByIdentifiersRequest |
GetDdsByIdentifiersRequest |
Renamed |
GetStatementByIdentifiersResponse |
GetDdsByIdentifiersResponse |
Renamed. Not returned in V4 — getDdsByIdentifiers always faults with NotFoundException (detail is UI-only) |
Fault changes¶
| V1 | V4 | Notes |
|---|---|---|
DdsPermissionDeniedException |
PermissionDeniedException |
Renamed (generic) |
BusinessRulesValidationException |
BusinessRulesValidationException |
Unchanged |
| — | NotFoundException |
New — returned by getDds / getDdsByInternalReference when no match is found, and always by getDdsByIdentifiers in V4 (detail retrieval is UI-only) |
Data model changes¶
| Change | Details |
|---|---|
operatorType → operatorRole |
Field renamed; values reduced to OPERATOR / REPRESENTATIVE_OPERATOR (TRADER roles removed) |
ddsIdentifier → uuid |
Identifier field renamed across all request types |
nameAndAddress → operatorAddress + operatorName |
V1 combined name+address split into structured fields |
volume removed from GoodsMeasure |
Use netWeight or supplementaryUnit instead |
netWeight type changed |
From DecimalThreePrecType to DecimalSixteenTotalSixPrecType (16 total, 6 fraction) |
supplementaryUnit type changed |
From nonNegativeInteger to DecimalSixteenTotalSixPrecType |
supplementaryUnitQualifier type changed |
From fixed enum (60+ values) to free-text string (3-4 chars) |
percentageEstimationOrDeviation added |
New field in GoodsMeasure |
ScientificNameType max length |
Increased from 100 to 200 |
speciesInfo moved |
Now in DDS-specific namespace |
| Operator identifier types reduced | Only eori, vat, gln, tin remain (8 types removed) |
operatorName added |
New mandatory field (was inside address in V1) |
TRADE activity type removed |
Traders no longer submit DDS |
associatedStatements → groupedDeclarations |
Renamed; now uses GroupedDeclarationsType with groupedDeclaration reference numbers (max 2000) |
| Common model introduced | V4 uses shared eudr-common.xsd types |
| Retrieval merged into DDS service | No separate retrieval service |
GROUPED, OBSOLETE, SUSPENDED, UPDATED statuses |
New in V4 EudrStatusType |
CANCELLED status removed |
Removed from external enumeration |
referenceNumberInfo added |
New optional field on overview responses (OverviewType) — human-readable reference-number status ("Under system analysis" / "Under Competent Authority review (Article 17)" / "Assigned") |
summaryAddress added |
New optional SummaryAddressType (name + country) on EconomicOperatorIdentificationType, alongside operatorAddress |
EudrUserMessage response header added |
New optional header (EudrUserMessageType, max 2000) carrying EUDR announcements |
Status values¶
| V1 Value | V4 Value | Change |
|---|---|---|
AVAILABLE |
AVAILABLE |
Unchanged |
SUBMITTED |
SUBMITTED |
Unchanged |
REJECTED |
REJECTED |
Unchanged |
CANCELLED |
— | Removed |
WITHDRAWN |
WITHDRAWN |
Unchanged |
ARCHIVED |
ARCHIVED |
Unchanged |
| — | SUSPENDED |
New — not active in current release |
| — | UPDATED |
New — not active in current release |
| — | GROUPED |
New — grouped declaration status |
| — | OBSOLETE |
New — superseded declaration |
Error codes (Retrieval)¶
| Error Code | Description |
|---|---|
EUDR_NUMBER_EMPTY |
Reference or verification number is null/empty |
EUDR_NUMBER_INVALID |
Contains prohibited characters |
EUDR_NUMBER_TOO_LONG |
Exceeds maximum allowed length |
EUDR_WEBSERVICE_STATEMENT_NOT_FOUND |
DDS not found or not in AVAILABLE/ARCHIVED status |
Already on V3?
This guide covers migrating all the way from V1 to the current V4 contract. If you are already on V3 and only need the incremental V3 → V4 changes, see the DDS V3 → V4 Migration Guide.