DDS Migration: V2 to V4¶
Detailed field-by-field mapping
For a complete field-level mapping with types, constraints, and regulatory references, see DDS Field-Level Mapping.
V2 Submission: EUDRSubmissionServiceV2 — /tracesnt/ws/EUDRSubmissionServiceV2
V2 Retrieval: EUDRRetrievalServiceV2 — /tracesnt/ws/EUDRRetrievalServiceV2
V4 (unified): EUDRDueDiligenceStatementServiceV4 — /tracesnt/ws/EUDRDueDiligenceStatementServiceV4
Key change: V4 consolidates submission and retrieval into a single service.
Already on V3?
This guide covers migrating all the way from V2 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.
Namespace change:
http://ec.europa.eu/tracesnt/certificate/eudr/submission/v2 → http://ec.europa.eu/tracesnt/certificate/eudr/due-diligence-statement/v4
http://ec.europa.eu/tracesnt/certificate/eudr/retrieval/v2 → merged into the above
Operation changes¶
| V2 Service | V2 Operation | V4 Operation | Change |
|---|---|---|---|
| Submission | submitDds |
submitDds |
Request/response types renamed (see below) |
| Submission | amendDds |
amendDds |
Request/response types renamed |
| Submission | retractDds |
withdrawDds |
Renamed from retract to withdraw |
| Retrieval | getDdsInfo |
getDds |
Renamed; moved to DDS service |
| Retrieval | getDdsInfoByInternalReferenceNumber |
getDdsByInternalReference |
Renamed; moved to DDS service |
| 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 |
| Retrieval | getReferencedDds |
— | Removed in V4 |
Request/Response type changes¶
Submission operations¶
| V2 | V4 | Notes |
|---|---|---|
SubmitStatementRequest |
SubmitDdsRequest |
Renamed; adds operatorRole field (OPERATOR / REPRESENTATIVE_OPERATOR) replacing operatorType |
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¶
| V2 | 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. Defined in the schema but not returned in V4 — getDdsByIdentifiers always faults with NotFoundException (detail is UI-only) |
GetReferencedDdsRequest |
— | Removed |
GetReferencedDdsResponse |
— | Removed |
Fault changes¶
| V2 | 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 in submit request; values changed to OPERATOR / REPRESENTATIVE_OPERATOR (TRADER roles removed) |
ddsIdentifier → uuid |
Identifier field renamed across all request types |
speciesInfo added to DdsCommodityType |
New — supports scientificName and commonName (up to 500 per commodity) |
| Producer type restructured | producerPosition → position, producerCountry → country, producerName → name |
| Producer location | V4 DDS requires geometryGeojson only (no postal address option) |
associatedStatements → groupedDeclarations |
Renamed; now uses GroupedDeclarationsType with groupedDeclaration reference numbers (max 2000) |
GROUPED / OBSOLETE statuses |
New lifecycle states for grouped declarations |
| Common model | V4 uses shared eudr-common.xsd types (UuidType, ActivityType, etc.) instead of V2's model/v2/eudr.xsd |
getReferencedDds removed |
Supply chain traversal operation no longer available in V4 |
| Retrieval merged into DDS service | No separate retrieval service — all operations on one endpoint |
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 |