Skip to content

EU Deforestation Regulation (EUDR) Compliance Guide

This guide provides an overview of the EU Deforestation Regulation (EUDR) and explains how to use our platform's API to manage and track the necessary data for compliance.

What is EUDR?

The EU Deforestation Regulation is a law enacted by the European Union to ensure that products placed on the EU market do not contribute to deforestation or forest degradation. It requires companies to prove that their products are "deforestation-free," meaning they were not produced on land that was deforested or degraded after December 31, 2020.

The regulation covers specific commodities, including cattle, cocoa, coffee, oil palm, rubber, soya, and wood, as well as products derived from them, such as paper and printed materials.

A Brief Guide to EUDR Compliance

To comply with EUDR, operators and traders placing relevant products on the EU market must conduct thorough due diligence. The core requirements include:

  1. Data Collection: Gathering detailed information about the product, its quantity, its origin, and its supply chain.
  2. Geolocation: Collecting the precise geographic coordinates of the plots of land where the raw materials were produced.
  3. Deforestation-Free Verification: Confirming that the land was not subject to deforestation after the cutoff date of December 31, 2020.
  4. Risk Assessment: Evaluating the risk of non-compliance, considering factors like the country of production, the complexity of the supply chain, and the presence of indigenous peoples.
  5. Risk Mitigation: Implementing measures to mitigate any identified risks to a negligible level.
  6. Due Diligence Statement (DDS): Submitting a formal declaration to the EU authorities that confirms due diligence has been successfully carried out and the products are compliant.

How to Use Our API for EUDR Compliance

Our API is designed to help you capture, organize, and manage all the data required for EUDR compliance. The data models are structured to mirror the regulation's requirements, making it easier to prepare for and submit your Due Diligence Statements.

Below is a guide to the key data objects and fields in our GraphQL API.

Core Object: MaterialSubstrateBatch

This is the central object for tracking a specific batch or lot of substrate material you receive. It serves as the primary record for collecting EUDR-related data for a given delivery.

  • batchNumber: The manufacturer's unique number for the batch.
  • deliveryDate: When you received the batch.
  • quantityReceived & quantityRemaining: The amount of material in the batch.
  • productionDate: Crucial for EUDR. The date the material was manufactured. For virgin fiber, this must be after December 31, 2020.
  • harvestDateStart & harvestDateEnd: The date range when the raw commodity (e.g., wood) was harvested. This must also be after December 31, 2020.
  • deforestationFreeDeclaration: A boolean field where you record the supplier's declaration that the material is deforestation-free.
  • deforestationDeclarationDate: The date of the supplier's declaration.

Traceability: MaterialOperator

You can link each MaterialSubstrateBatch to the relevant operators in your supply chain. This is essential for traceability.

  • supplier: The direct supplier or distributor of the batch.
  • manufacturer: The paper mill or original manufacturer of the material.

The MaterialOperator object itself stores key details about each entity:

  • companyName, registrationNumber, eoriNumber
  • addressLine1, city, postalCode, countryCode

Geolocation of Origin: geolocations

For any non-recycled material, you must provide geolocation data. The geolocations field on a MaterialSubstrateBatch is an array of MaterialSourceGeolocation objects, one for each plot of land.

  • latitude & longitude: The precise WGS84 coordinates.
  • plotSizeHectares: The size of the land plot.
  • determinationDate: When the coordinates were determined.
  • determinationMethod: How the coordinates were gathered (e.g., GPS).

Product Composition: treeSpecies

For wood-based products, you must declare the composition. The treeSpecies field on a MaterialSubstrateBatch is an array of MaterialTreeSpecies objects.

  • commonName & scientificName: The names of the tree species.
  • percentage: The percentage of that species in the material.

Risk Management: riskAssessment

Each MaterialSubstrateBatch has a riskAssessment object (MaterialRiskAssessment) to document your evaluation process.

  • riskLevel: The overall conclusion (e.g., negligible, low, high).
  • assessmentDate & assessedBy: Who performed the assessment and when.
  • countryRisk, supplierRisk, documentationRisk: Risk levels for specific factors.
  • mitigationMeasures: An array of strings describing steps taken to reduce risk.
  • rationale: A detailed explanation for your risk conclusion.
  • legalCompliance (MaterialLegalCompliance): An object to confirm the material was produced in accordance with the laws of the production country.
    • isCompliant: A boolean indicating compliance.
    • verificationMethod: How you verified this (e.g., documentary_evidence).
  • complianceDocuments ([MaterialComplianceDocument]): An array for storing records of supporting documents like FSC/PEFC certificates, supplier declarations, or ISO certifications.
    • documentType, documentNumber, issuingAuthority, issueDate, expiryDate.

The Due Diligence Statement: ComplianceDueDiligenceStatement

This is the final object that consolidates all your data into a formal declaration for submission to the authorities.

  • ddsReferenceNumber: The unique reference number you must submit to the EU Information System.
  • placementDate: The date the products are or will be placed on the EU market.
  • productDescription & hsCodes: Description and commodity codes for the final products.
  • conclusion: The overall conclusion of your due diligence (e.g., negligible_risk).
  • riskLevelDeclared: The final risk level you are declaring.
  • substrateBatches: A list of all MaterialSubstrateBatch records covered by this statement.

By diligently populating these fields as you procure and use materials, you can build a robust, auditable trail for EUDR compliance and generate your Due Diligence Statements with confidence.

Practical Implementation Examples

Here's how to use our GraphQL API to implement a complete EUDR compliance workflow.

Use Case 1: Registering a New Substrate Batch

When you receive a delivery of paper or substrate, create a MaterialSubstrateBatch record with all EUDR-required data:

graphql
mutation CreateSubstrateBatch {
  createSubstrateBatch(
    input: {
      substrateId: "substrate-abc-123"
      batchNumber: "MILL-2025-10-4567"
      deliveryDate: "2025-10-15"
      quantityReceived: 5000
      quantityRemaining: 5000
      unitOfMeasure: KILOGRAMS
      productionDate: "2025-09-20"
      harvestDateStart: "2024-11-01"
      harvestDateEnd: "2025-01-15"
      isRecycled: false
      deforestationFreeDeclaration: true
      deforestationDeclarationDate: "2025-10-01"
      complianceStatus: PENDING_REVIEW
      supplierId: "supplier-xyz-789"
      manufacturerId: "manufacturer-def-456"
      certifications: [FSC_CERTIFIED, PEFC_CERTIFIED]
      geolocations: [
        {
          latitude: 60.1699
          longitude: 24.9384
          plotSizeHectares: 12.5
          determinationMethod: GPS_DEVICE
          determinationDate: "2024-10-15"
          countryCode: "FI"
        }
      ]
      treeSpecies: [
        {
          commonName: "Norway Spruce"
          scientificName: "Picea abies"
          percentage: 70
        },
        {
          commonName: "Scots Pine"
          scientificName: "Pinus sylvestris"
          percentage: 30
        }
      ]
      legalCompliance: {
        isCompliant: true
        verificationMethod: DOCUMENTARY_EVIDENCE
        verificationDate: "2025-10-01"
        verifiedBy: "Compliance Officer A"
      }
      riskAssessment: {
        riskLevel: NEGLIGIBLE
        assessmentDate: "2025-10-16"
        assessedBy: "Risk Analyst B"
        countryRisk: LOW
        supplierRisk: NEGLIGIBLE
        documentationRisk: NEGLIGIBLE
        supplyChainComplexity: SIMPLE
        mitigationMeasures: ["FSC chain of custody verified", "Supplier audit completed 2025-Q3"]
        rationale: "Finland is EU member state with robust forestry regulations. Supplier has 15-year track record with full FSC certification and transparent supply chain."
      }
      complianceDocuments: [
        {
          documentType: FSC_CERTIFICATE
          documentNumber: "FSC-C123456"
          issuingAuthority: "Forest Stewardship Council"
          issueDate: "2024-01-15"
          expiryDate: "2029-01-14"
          fileReference: "s3://compliance-docs/fsc-cert-2024.pdf"
        }
      ]
    }
  ) {
    result {
      id
      batchNumber
      complianceStatus
      riskAssessment {
        riskLevel
      }
    }
    errors {
      message
      path
    }
  }
}

Use Case 2: Querying Batches Needing Compliance Review

Find all substrate batches that require review before use:

graphql
query FindBatchesPendingReview {
  listMaterialSubstrateBatches(
    filter: {
      complianceStatus: { eq: PENDING_REVIEW }
      quantityRemaining: { greaterThan: 0 }
    }
    sort: { field: DELIVERY_DATE, direction: DESC }
  ) {
    results {
      id
      batchNumber
      deliveryDate
      quantityRemaining
      supplier {
        companyName
      }
      manufacturer {
        companyName
      }
      deforestationFreeDeclaration
      geolocations {
        latitude
        longitude
        countryCode
      }
      riskAssessment {
        riskLevel
        assessmentDate
      }
    }
  }
}

Use Case 3: Approving a Batch After Review

Once compliance is verified, update the batch status:

graphql
mutation ApproveSubstrateBatch {
  updateSubstrateBatch(
    id: "batch-abc-123"
    input: {
      complianceStatus: APPROVED
      reviewedBy: "Jane Smith, Compliance Manager"
      reviewedAt: "2025-10-23T14:30:00Z"
      notes: "All EUDR documentation verified. FSC certificate valid. Geolocation data matches supplier declaration."
    }
  ) {
    result {
      id
      complianceStatus
      reviewedBy
      reviewedAt
    }
    errors {
      message
    }
  }
}

Use Case 4: Creating a Due Diligence Statement

When you're ready to place products on the EU market, create a DDS that references all relevant batches:

graphql
mutation CreateDDS {
  createDueDiligenceStatement(
    input: {
      ddsReferenceNumber: "DDS-2025-GB-00123"
      issueDate: "2025-10-23"
      validUntil: "2026-10-23"
      placementDate: "2025-11-01"
      operatorName: "Your Print Company Ltd"
      operatorRegistrationNumber: "GB123456789000"
      productDescription: "Printed brochures, catalogues, and marketing materials"
      hsCodes: ["4901.99", "4911.10"]
      totalQuantity: 50000
      unitOfMeasure: KILOGRAMS
      conclusion: COMPLIANT
      riskLevelDeclared: NEGLIGIBLE
      status: DRAFT
      notes: "All substrate batches sourced from FSC-certified suppliers in Finland and Sweden. Full geolocation data and deforestation-free declarations obtained."
    }
  ) {
    result {
      id
      ddsReferenceNumber
      status
      conclusion
    }
    errors {
      message
    }
  }
}

Use Case 5: Linking Batches to a DDS

Associate substrate batches with the DDS:

graphql
mutation LinkBatchToDDS {
  addDdsSubstrateBatch(
    input: {
      dueDiligenceStatementId: "dds-xyz-789"
      substrateBatchId: "batch-abc-123"
    }
  ) {
    result {
      id
    }
    errors {
      message
    }
  }
}

Use Case 6: Submitting the DDS

Mark the DDS as submitted to authorities:

graphql
mutation SubmitDDS {
  submitDueDiligenceStatement(id: "dds-xyz-789") {
    result {
      id
      status
      submittedToAuthority
      submissionDate
    }
    errors {
      message
    }
  }
}

Use Case 7: Auditing EUDR Compliance

Query all DDS records for a specific time period:

graphql
query AuditDDSRecords {
  listDueDiligenceStatements(
    filter: {
      placementDate: {
        greaterThanOrEqual: "2025-01-01"
        lessThanOrEqual: "2025-12-31"
      }
      status: { in: [SUBMITTED, APPROVED] }
    }
    sort: { field: PLACEMENT_DATE, direction: DESC }
  ) {
    results {
      id
      ddsReferenceNumber
      placementDate
      productDescription
      totalQuantity
      riskLevelDeclared
      conclusion
      submissionDate
      substrateBatches {
        id
        batchNumber
        supplier {
          companyName
          countryCode
        }
        geolocations {
          latitude
          longitude
          countryCode
        }
      }
    }
  }
}

Best Practices for EUDR Compliance

Start Early in the Procurement Process

Collect EUDR data at the point of purchase. Include geolocation requirements, deforestation-free declarations, and harvest date ranges in your purchasing specifications and supplier contracts.

Maintain Complete Geolocation Records

For non-recycled materials, ensure you have complete geolocation data for every plot. The EU requires polygon coordinates for plots larger than 4 hectares, but point coordinates (latitude/longitude) are acceptable for smaller plots.

Verify Supplier Declarations

Don't rely solely on supplier statements. Cross-reference with:

  • FSC/PEFC chain of custody certificates
  • Satellite imagery of harvest areas (available through EU's DDS system)
  • Third-party verification reports
  • Country risk assessments (EU provides standardized benchmarking)

Document Your Risk Assessment

Your riskAssessment should include:

  • Country risk: Use EU's official country benchmarking (standard, low, or negligible)
  • Supplier risk: Based on audit history, certifications, and transparency
  • Documentation risk: Quality and completeness of supporting evidence
  • Mitigation measures: Specific actions taken to reduce identified risks

Use the Status Workflow

Implement a clear approval process:

  1. PENDING_REVIEW: Initial state when batch is received
  2. UNDER_REVIEW: Compliance team is verifying documentation
  3. APPROVED: All checks passed, batch can be used
  4. REJECTED: Non-compliant, cannot be used
  5. REQUIRES_ADDITIONAL_INFO: More data needed from supplier

Track Batch Usage

Use the batchUsages relationship to maintain a complete audit trail of which batches were used in which jobs or products. This is essential when creating DDS records.

Plan for 5-Year Retention

Set retentionUntil dates appropriately. EUDR requires you to maintain all records for 5 years from the date products are placed on the market.

Prepare for High-Risk Scenarios

If you source materials from high-risk countries or have complex supply chains:

  • Conduct enhanced due diligence with third-party verification
  • Obtain additional documentation (export permits, FLEGT licenses)
  • Consider requiring on-site audits of suppliers
  • Document all mitigation measures in detail

Conclusion

The EU Deforestation Regulation represents a significant shift in supply chain transparency requirements for the print industry. By integrating EUDR data collection into your procurement and production workflows using our API, you can:

  • Maintain complete traceability from forest to finished product
  • Conduct systematic risk assessments based on EU criteria
  • Generate compliant Due Diligence Statements efficiently
  • Respond quickly to authority inquiries or audits
  • Demonstrate your commitment to sustainable sourcing

The structured data model ensures all required information is captured, validated, and readily accessible when needed for regulatory submissions or customer inquiries.

For questions about specific EUDR requirements or implementation guidance, consult the official EU guidance documents or contact your CoCoCo implementation specialist.


Schema Reference

The following GraphQL types, mutations, and queries are essential for EUDR compliance:

Core Types

TypeDescriptionSchema Reference
MaterialSubstrateBatchCentral record for tracking substrate batches with EUDR data (geolocation, harvest dates, risk assessments)MaterialSubstrateBatch
ComplianceDueDiligenceStatementDue Diligence Statement record for EU regulatory submissionComplianceDueDiligenceStatement
MaterialOperatorSupply chain operator (supplier, manufacturer, distributor)MaterialOperator
MaterialSourceGeolocationGeographic coordinates of production plotsEmbedded in MaterialSubstrateBatch
MaterialTreeSpeciesTree species composition for wood-based productsEmbedded in MaterialSubstrateBatch
MaterialRiskAssessmentEUDR risk assessment documentationEmbedded in MaterialSubstrateBatch
MaterialLegalComplianceLegal compliance verification for country of productionEmbedded in MaterialSubstrateBatch
MaterialComplianceDocumentSupporting compliance documentation (certificates, permits)Embedded in MaterialSubstrateBatch

Key Enums

EnumPurposeSchema Reference
MaterialsComplianceStatusEnumBatch compliance workflow statesMaterialsComplianceStatusEnum
MaterialsEudrRiskLevelEnumEUDR risk levels (NEGLIGIBLE, LOW, STANDARD, HIGH)MaterialsEudrRiskLevelEnum
ComplianceDdsConclusionEnumDDS conclusion typesComplianceDdsConclusionEnum
ComplianceDdsStatusEnumDDS workflow statesComplianceDdsStatusEnum
MaterialsCertificationTypeEnumEnvironmental certifications (FSC, PEFC, etc.)MaterialsCertificationTypeEnum
MaterialsGeolocationMethodEnumHow coordinates were determinedMaterialsGeolocationMethodEnum
MaterialsUnitOfMeasureEnumUnits for quantitiesMaterialsUnitOfMeasureEnum

Mutations

MutationPurposeSchema Reference
createSubstrateBatchRegister a new substrate batch deliveryCreateSubstrateBatchInput
updateSubstrateBatchUpdate batch information or compliance statusUpdateSubstrateBatchInput
approveSubstrateBatchComplianceMark batch as compliant after reviewApproveSubstrateBatchComplianceInput
createDueDiligenceStatementCreate a new DDSCreateDueDiligenceStatementInput
updateDueDiligenceStatementUpdate DDS detailsUpdateDueDiligenceStatementInput
submitDueDiligenceStatementSubmit DDS to authoritiesSubmitDueDiligenceStatementResult
addDdsSubstrateBatchLink a substrate batch to a DDSAddDdsSubstrateBatchInput
deleteDdsSubstrateBatchRemove a batch from a DDSDeleteDdsSubstrateBatchResult
addDdsComponentLink a finished component to a DDSAddDdsComponentInput
createMaterialOperatorRegister a supply chain operatorCreateMaterialOperatorInput
createBatchUsageRecord usage of substrate from a batchCreateBatchUsageInput

Queries

QueryPurposeSchema Reference
listMaterialSubstrateBatchesQuery substrate batches with filteringMaterialSubstrateBatchFilterInput
listDueDiligenceStatementsQuery DDS recordsComplianceDueDiligenceStatementFilterInput
listMaterialOperatorsQuery supply chain operatorsMaterialOperatorFilterInput

For complete schema documentation, browse the full GraphQL Schema Reference.

Connect. Combine. Collaborate.
The pioneering open integration platform, dedicated to transforming connectivity in the printing industry.