Creuto is now an OpenAI Select Partner Read More
The EUDR API is SOAP with WS-Security and base64 GeoJSON. What V3 changed, the GeoJSON rules that fail silently, and how to build before 30 December 2026.

The EUDR API your ERP has to call before 30 December 2026 is V3: a SOAP service behind WS-Security that accepts plot geolocation only as base64-encoded GeoJSON. The Commission says V1 and V2 will be retired when V3 is released. This guide covers what the payload carries, which GeoJSON rules quietly corrupt data, and how to build against a spec the Commission itself says may not be final.
The deadline itself is now fixed in law. Regulation (EU) 2025/2650, published in the Official Journal on 23 December 2025, makes the core obligations of Regulation (EU) 2023/1115 apply from 30 December 2026. The integration work is what remains open. The facts below are as of October 2026.
| Date | What happens | Who it affects |
|---|---|---|
| 30 December 2026 | Articles 3 to 13, 16 to 24, 26, 31 and 32 apply (Reg. 2025/2650) | Large and medium operators, and everyone not in the next row |
| 30 June 2027 | Same articles apply | Micro and small undertakings established as such by 31 December 2024, except for products covered by the old EU Timber Regulation |
| 17 August 2026 | Latest update to the GeoJSON file description | Anyone producing geolocation files |
| No date published | V1 and V2 decommissioned "with the release of V3" (operator API reference) | Every existing integration |
The regulation covers seven commodities: cattle, cocoa, coffee, oil palm, rubber, soya and wood. For Indian exporters, coffee and rubber are the ones that matter. Shrimp and other seafood are not on the list.
The EUDR Information System exposes SOAP web services only. The operator API reference lists a production base URL at https://eudr.webcloud.ec.europa.eu/tracesnt/ and an acceptance base URL at https://acceptance.eudr.webcloud.ec.europa.eu/tracesnt/, with three services:
| Service | Endpoint | Used by |
|---|---|---|
| Due Diligence Statement | /ws/EUDRDueDiligenceStatementServiceV3?wsdl | Operators and authorised representatives |
| Simplified Declaration | /ws/EUDRSimplifiedDeclarationServiceV3?wsdl | Micro or small primary operators in low-risk countries |
| Echo | /ws/EudrEchoService?wsdl | Connectivity and credential testing |
Authentication is a WS-Security UsernameToken over HTTPS, with a PasswordDigest rather than a plain password, a required timestamp (wsu:Created and wsu:Expires), and a WebServiceClientId header. The username comes from your EU Login profile, and the authentication key comes from the "Web Services Access" section of your profile, according to the credentials guide. The digest follows the OASIS UsernameToken Profile: Password_Digest = Base64 ( SHA-1 ( nonce + created + password ) ).
This is the security header from the Commission's Echo service sample request, copied as published:
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Timestamp>
<wsu:Created>2026-01-15T10:00:00.000Z</wsu:Created>
<wsu:Expires>2026-01-15T10:05:00.000Z</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken>
<wsse:Username>your-username</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">digest-value</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">nonce-value</wsse:Nonce>
<wsu:Created>2026-01-15T10:00:00.000Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<base:WebServiceClientId>YOUR_CLIENT_ID</base:WebServiceClientId>
</soapenv:Header>The base prefix is declared on the envelope in that sample as http://ec.europa.eu/sanco/tracesnt/base/v4. Three details from the Commission's own pages will save you a day each:
wsse:Password or wsse:Nonce, the service returns a bare InternalSystemException fault and logs nothing on its side, per the troubleshooting page.wsu:Created must be within 5 minutes of server time, so run NTP on whatever host signs the request (Echo service reference).If one API user acts for several operators, which is the usual setup for a software provider or a group with several legal entities, every business call needs a BodyIdentity header carrying an OperatorAccessIdentifier. That child element must be unqualified (no namespace prefix). Without the header, a multi-operator request is rejected. Echo ignores the header, so it can't tell you whether you've configured it correctly. Operators created before the feature existed have to request the identifier from SANTE-TRACES@ec.europa.eu.
V3 is a redesign, not a patch. The V2 to V3 migration guide merges the separate V2 submission and retrieval services into a single EUDRDueDiligenceStatementServiceV3 endpoint, under a new namespace: http://ec.europa.eu/tracesnt/certificate/eudr/due-diligence-statement/v3.
| V2 operation | V3 operation | What breaks |
|---|---|---|
| submitDds | submitDds | Request type renamed; operatorType becomes operatorRole (OPERATOR or REPRESENTATIVE_OPERATOR) |
| retractDds | withdrawDds | Renamed; returns uuid and a lifecycle status instead of a status string |
| getDdsInfo | getDds | Accepts up to 100 UUIDs |
| getStatementByIdentifiers | getDdsByIdentifiers | Returns the full statement |
| getReferencedDds | None | Removed: no supply-chain traversal in V3 |
Two quieter changes catch typed clients. ddsIdentifier is renamed uuid everywhere. The change log also adds SUSPENDED, UPDATED, GROUPED and OBSOLETE to the status enum and warns that new enum values "may require client-side updates to avoid unmarshalling errors". Statements submitted before the amendment stay readable through V3 in read-only mode.
A V3 submitDds call wraps an operatorRole and a statement. The DDS V3 reference defines the statement's required fields as activityType (IMPORT, EXPORT or DOMESTIC), commodities and geoLocationConfidential, a boolean that controls whether geolocation is disclosed down the supply chain. Each commodity carries an HS heading of 2 to 10 digits and a commercial description. Each producer carries an ISO 3166-1 alpha-2 country and a required geometryGeojson field, typed base64Binary.
The validation rules add the limits your ERP has to enforce before it submits:
Your ERP also needs to work around time limits. A statement can be amended or withdrawn within a 72-hour window. After that, a change means a new submission with a new identifier. Once customs has used the statement for clearance, it's locked. The usage guidance asks you to wait at least 30 minutes after submitting before you poll for status. It also sets a limit of 5 calls per second per IP. Plan for an asynchronous job and a status table, not a synchronous button.
EUDR GeoJSON must use WGS 84 (EPSG:4326), with coordinates in longitude, latitude order. The same rules apply to the web UI and the API, according to the GeoJSON file description. Most of the failures we'd expect come from data that looks valid:
Area property defaults to 4 hectares. A Point area above 4 hectares raises an error for anything except cattle, and any area provided must be at least 0.0001 ha. Plots above 4 hectares need polygons."Area": "3" is read as 0, because a quoted number isn't treated as a number.productionplace is not ProductionPlace.One warning about copying the spec. Its own single-Feature example gives a Point with nested brackets, [[-105.029865, 40.622831]], which is not how RFC 7946 defines a Point position. Use the FeatureCollection examples instead. Here is a minimal Type I file in that shape. The property names come from the spec, and the coordinates are illustrative:
{"type":"FeatureCollection","features":[
{"type":"Feature",
"properties":{"ProductionPlace":"PLOT 01","ProducerCountry":"IN"},
"geometry":{"type":"Polygon","coordinates":[[[75.801234,12.401234],[75.805678,12.401234],[75.805678,12.405678],[75.801234,12.405678],[75.801234,12.401234]]]}},
{"type":"Feature",
"properties":{"ProductionPlace":"PLOT 02","Area":1.5,"ProducerCountry":"IN"},
"geometry":{"type":"Point","coordinates":[75.812345,12.412345]}}
]}Validate that file in your own pipeline, then base64-encode it into geometryGeojson. Don't leave the rejection to TRACES.
Downstream operators don't submit a due diligence statement. Regulation 2025/2650 defines a downstream operator as anyone who places on the market or exports products made from relevant products that are all already covered by a statement or a simplified declaration. The API FAQ says their duty is to collect and keep supplier information, reference numbers or declaration identifiers, and buyer information for at least five years.
A simplified declaration is a one-time filing by a micro or small primary operator: a natural person or small business, established in a low-risk country, selling what it grew itself. It may use a postal address instead of GeoJSON. In return it gets a declaration identifier, which travels with the goods in place of a DDS reference number. India is on the low-risk list in Implementing Regulation (EU) 2025/1093. That makes the simplified route available in principle to Indian growers who themselves place coffee or rubber on the EU market or export it. It doesn't help a curing works or trader that buys from growers.
For most Indian coffee and rubber exporters, the statement is filed by the operator placing the goods on the EU market, or by an authorised representative established in the Union. In practice, that usually means your EU buyer. The non-EU-operator rule above points the same way. Either way, your job is to hand over plot geolocation that passes the rules above. Also watch the product scope: the Commission's May 2026 package proposes adding soluble coffee through a draft delegated act.
The case for waiting is real. The operator reference says the documentation "may not be final" while the amendment of Implementing Regulation (EU) 2024/3084 is under way. Grouping and simplified-declaration versioning may not be in the first release. The change log says mTLS authentication is planned for a later release, with UsernameToken kept during a transition. On that reading, building now means building twice.
We'd still build now, for two reasons. The legal date is fixed, and the Commission's 4 May 2026 simplification package brought guidance, a draft delegated act and an updated draft implementing act on the Information System, not a new date. And V1 and V2 go away when V3 ships, so there's no older version to fall back on. To keep the rework small, build like this:
?wsdl with ?xsd=1, ?xsd=2), and regenerate whenever the Commission publishes an update.internalReferenceNumber alongside the returned uuid, then reconcile with getDdsByInternalReference.This is the wrong choice if you file a handful of statements a year. The TRACES web UI applies the same validation, and an API integration won't pay for itself at that volume. It's also the wrong choice if your plot data isn't clean yet. Fix the GeoJSON first, because the API adds nothing to bad coordinates.
A word on where we stand. We have not shipped a TRACES integration, and everything above comes from the Commission's published spec. We have built the system on the other side of it: a custom ERP for a large industrial client that unified HR, CRM, inventory and finance. The shape is also familiar from GST e-invoicing, where an ERP must produce a schema-valid payload for a government system and keep what comes back. If you are scoping this as custom ERP development or as a standalone adapter through our API development and integrations practice, budget for the data cleanup, not just the SOAP client.
The next decision is a small one, and it's due this week: who in your organisation owns the EU Login account that will hold the authentication key. Under Regulation 2025/2650, the maximum fine for a legal person must be at least 4% of its total annual Union-wide turnover. With stakes like that, the owner of that key shouldn't be whoever happened to sign up first.
The EUDR API is SOAP only. The Commission publishes WSDL endpoints for the Due Diligence Statement V3, Simplified Declaration V3 and Echo services, secured with a WS-Security UsernameToken using a PasswordDigest, a required timestamp and a WebServiceClientId header over HTTPS. There is no REST interface in the published V3 operator documentation.
To connect to the EUDR API, register the operator and an EU Login user in the EUDR Information System, activate Web Services Access in your profile to get the authentication key, and test in the acceptance environment first. The Echo service confirms credentials and headers there; production is verified with a real, tightly filtered call.
EUDR requires GeoJSON in WGS 84 with longitude-latitude coordinates, truncated to six decimal places. Polygons must be closed with at least four coordinate pairs and no holes or crossing lines. A Point without an Area property is treated as four hectares, and all geolocation in one statement shares a 25 MB limit.
EUDR applies to large and medium operators from 30 December 2026 under Regulation (EU) 2025/2650. Micro and small undertakings established as such by 31 December 2024 have until 30 June 2027, except for timber products that were already covered by the old EU Timber Regulation.
An EUDR simplified declaration is a one-time filing by a micro or small primary operator established in a low-risk country that sells relevant products it grew itself. It replaces per-shipment due diligence statements, may use a postal address instead of GeoJSON, and returns a declaration identifier that travels with the goods.
Downstream operators do not submit a due diligence statement under the amended EUDR. Their obligation is to collect and keep supplier information, the reference numbers or declaration identifiers of their supplies, and buyer information for at least five years. Non-SME downstream operators must also register in the Information System.
Ready to take the first step towards unlocking opportunities, realizing goals, and embracing innovation? We're here and eager to connect.