---
title: "EUDR Implementation Guide"
description: "Step-by-step guide for implementing EU Deforestation Regulation compliance using GS1 standards"
canonical_url: "https://openepcis.io/docs/digital-product-passport/eudr/implementation-guide"
last_updated: "2026-07-02T20:31:43.419Z"
---

<alert type="info">

**Masterdata and events** — `masterDataAvailableFor` is GS1 Web Vocabulary (no `gs1:` prefix needed). It is used to carry **lot- or serial-level masterdata** alongside an event: production batch, declaration references, incident records, regulatory citations. It must **not** carry **GTIN-level masterdata** (product name, generic specifications) — those live on the resolver, POSTed once via `POST /products/{gtin}`. Extension vocabularies (`battery:`, `eudr:`, `textile:`, `electronics:`) keep their prefix; they are declared in the document's `@context`.

</alert>

# EUDR Implementation Guide

This guide provides step-by-step instructions for implementing EU Deforestation Regulation (EUDR) 2023/1115 compliance using GS1 standards.

## Prerequisites

Before implementing EUDR compliance:

1. **GS1 Company Prefix** - Required for GTIN/GLN generation
2. **GS1 Digital Link Resolver** - For content negotiation
3. **EPCIS Repository** - For event storage and querying

## Implementation Steps

### Step 1: Set Up Identifiers

Use GS1 Digital Link identifiers for all entities:

```text
Product:      https://id.gs1.org/01/{GTIN}/21/{Serial}
Location:     https://id.gs1.org/414/{GLN}
Organization: https://id.gs1.org/417/{GLN}
```

**Example Timber Product:**

```text
https://id.gs1.org/01/09521234000020/21/LOG-2025-001
```

### Step 2: Create Location Master Data (Plot of Land)

Every EUDR-regulated commodity must be traceable to its production plot:

```json
{
  "@context": [
    { "gs1": "https://ref.gs1.org/voc/" },
    { "eudr": "https://ref.openepcis.io/extensions/eu/eudr/" }
  ],
  "@id": "https://id.gs1.org/414/9521234000099",
  "@type": "gs1:Place",

  "name": "Sustainable Oak Forest - Plot 47",

  "gs1:geo.polygon": "POLYGON((13.40 52.51, 13.41 52.51, 13.41 52.52, 13.40 52.52, 13.40 52.51))",
  "eudr:areaHectares": 2.5,
  "gs1:countryOfOrigin": "DE",
  "gs1:provinceOfOrigin": "Brandenburg",
  "eudr:forestManagementUnit": "FMU-DE-2024-00123",
  "eudr:landUseHistory": "Managed sustainable forest since 1920"
}
```

**Geolocation Requirements:**

- Plots > 4 hectares: Full polygon coordinates (WKT or GeoJSON)
- Plots ≤ 4 hectares: Center point (`gs1:geo`: "lat,lon")

### Step 3: Create Product Master Data

```json
{
  "@id": "https://id.gs1.org/01/09521234000020/21/LOG-2025-001",
  "@type": ["gs1:Product", "gs1:Product"],

  "gtin": "09521234000020",
  "serialNumber": "LOG-2025-001",

  "eudr:commodityType": { "@id": "eudr:Wood" },
  "eudr:timberProductType": { "@id": "eudr:RoundWood" },
  "eudr:speciesScientificName": "Quercus robur",
  "eudr:speciesCommonName": "European Oak",
  "gs1:harvestDate": "2025-01-15",

  "eudr:originDetails": {
    "@id": "https://id.gs1.org/414/9521234000099",
    "masterDataAvailableFor": {
      "@id": "https://id.gs1.org/414/9521234000099"
    }
  },

  "gs1:countryOfOrigin": "DE"
}
```

### Step 4: Record Harvesting Event

When a commodity is harvested/produced:

```json
{
  "@context": [
    "https://ref.gs1.org/standards/epcis/epcis-context.jsonld",
    { "eudr": "https://ref.openepcis.io/extensions/eu/eudr/" }
  ],
  "type": "EPCISDocument",
  "epcisBody": {
    "eventList": [{
      "type": "ObjectEvent",
      "eventTime": "2025-01-15T08:30:00.000Z",
      "action": "ADD",
      "bizStep": "commissioning",

      "epcList": [{
        "@id": "https://id.gs1.org/01/09521234000020/21/LOG-2025-001",
        "masterDataAvailableFor": {
          "@id": "https://id.gs1.org/01/09521234000020/21/LOG-2025-001"
        }
      }],

      "readPoint": {
        "id": "https://id.gs1.org/414/9521234000099",
        "masterDataAvailableFor": {
          "@id": "https://id.gs1.org/414/9521234000099"
        }
      },

      "ilmd": {
        "gs1:harvestDate": "2025-01-15",
        "eudr:speciesScientificName": "Quercus robur",
        "gs1:countryOfOrigin": "DE"
      }
    }]
  }
}
```

### Step 5: Complete Due Diligence Process

1. **Gather Information**
  - Product identification
  - Geolocation of production plot
  - Supplier documentation
  - Species identification
2. **Assess Risk**
  - Check country risk category
  - Verify documentation
  - Consider satellite imagery if needed
3. **Mitigate Risk** (if not negligible)
  - Additional verification
  - Third-party audits
  - Certification verification
4. **Submit to EUIS**
  - File due diligence statement
  - Receive EUIS reference number

### Step 6: Record Due Diligence Statement Event

```json
{
  "@context": [
    "https://ref.openepcis.io/extensions/eu/eudr/eudr-context.jsonld",
    "https://ref.gs1.org/standards/epcis/epcis-context.jsonld"
  ],
  "type": "ObjectEvent",
  "eventTime": "2025-01-20T10:00:00.000Z",
  "action": "OBSERVE",
  "bizStep": "inspecting",
  "epcList": [
    {
      "@id": "https://id.gs1.org/01/09521234000020/21/LOG-2025-001"
    }
  ],
  "regulatoryInformation": [
    {
      "@type": "gs1:RegulatoryInformation",
      "regulationType": {
        "@id": "gs1:RegulationTypeCode-DEFORESTATION_REGULATION"
      },
      "regulatoryAct": "EU 2023/1115",
      "regulatoryIdentifier": [
        {
          "regulatoryReferenceNumber": "EUIS-2025-DE-00012345",
          "regulatoryIdentifierType": "DUE_DILIGENCE_STATEMENT"
        }
      ],
      "isRegulationCompliant": true,
      "eudr:legallyHarvested": true,
      "eudr:riskLevel": {
        "@id": "eudr:Low"
      },
      "eudr:riskAssessmentDate": "2025-01-18"
    }
  ]
}
```

### Step 7: Record Transformations (Derived Products)

When commodities are processed into derived products:

```json
{
  "@context": [
    "https://ref.openepcis.io/extensions/eu/eudr/eudr-context.jsonld",
    "https://ref.gs1.org/standards/epcis/epcis-context.jsonld"
  ],
  "type": "TransformationEvent",
  "eventTime": "2025-02-15T14:00:00.000Z",
  "bizStep": "commissioning",
  "inputEPCList": [
    {
      "@id": "https://id.gs1.org/01/09521234000020/21/LOG-2025-001"
    },
    {
      "@id": "https://id.gs1.org/01/09521234000020/21/LOG-2025-002"
    }
  ],
  "outputEPCList": [
    {
      "@id": "https://id.gs1.org/01/09521234000037/21/TABLE-2025-001"
    }
  ],
  "ilmd": {
    "eudr:transformationDate": "2025-02-15",
    "eudr:timberProductType": {
      "@id": "eudr:Furniture"
    }
  }
}
```

## Validation

Use the OpenEPCIS Event Sentry validation profile:

```bash
# Validate harvesting event
openepcis-sentry validate --profile eudr-harvesting event.json

# Validate due diligence statement
openepcis-sentry validate --profile eudr-due-diligence statement.json
```

## Common Patterns

### Aggregating Geolocation for Derived Products

When a derived product comes from multiple plots:

```json
"eudr:originList": [
  { "@id": "https://id.gs1.org/01/09521234000020/21/LOG-2025-001" },
  { "@id": "https://id.gs1.org/01/09521234000020/21/LOG-2025-002" }
]
```

The derived product inherits traceability to all source plots.

### Handling High-Risk Countries

For products from high-risk countries:

1. Enhanced verification required
2. Third-party audits recommended
3. Satellite monitoring may be necessary
4. Document all mitigation measures

```json
"eudr:riskAssessment": {
  "@type": "eudr:RiskAssessment",
  "eudr:riskLevel": { "@id": "eudr:High" },
  "eudr:mitigationMeasures": "Third-party audit conducted. Satellite monitoring in place.",
  "eudr:verificationMethod": "On-site inspection + satellite imagery"
}
```

## Next Steps

- Review [Event Types](/docs/digital-product-passport/eudr/event-types) for all EPCIS events
- See [URL Patterns](/docs/digital-product-passport/eudr/url-patterns) for identifier structures
- Check the [GitHub repository](https://github.com/openepcis/openepcis-dpp-ready/tree/main/extensions/eu/eudr) for complete examples
