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:
- Data Collection: Gathering detailed information about the product, its quantity, its origin, and its supply chain.
- Geolocation: Collecting the precise geographic coordinates of the plots of land where the raw materials were produced.
- Deforestation-Free Verification: Confirming that the land was not subject to deforestation after the cutoff date of December 31, 2020.
- 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.
- Risk Mitigation: Implementing measures to mitigate any identified risks to a negligible level.
- 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,eoriNumberaddressLine1,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.
Legal & Compliance Documentation
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 allMaterialSubstrateBatchrecords 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:
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:
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:
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:
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:
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:
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:
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:
- PENDING_REVIEW: Initial state when batch is received
- UNDER_REVIEW: Compliance team is verifying documentation
- APPROVED: All checks passed, batch can be used
- REJECTED: Non-compliant, cannot be used
- 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
| Type | Description | Schema Reference |
|---|---|---|
MaterialSubstrateBatch | Central record for tracking substrate batches with EUDR data (geolocation, harvest dates, risk assessments) | MaterialSubstrateBatch |
ComplianceDueDiligenceStatement | Due Diligence Statement record for EU regulatory submission | ComplianceDueDiligenceStatement |
MaterialOperator | Supply chain operator (supplier, manufacturer, distributor) | MaterialOperator |
MaterialSourceGeolocation | Geographic coordinates of production plots | Embedded in MaterialSubstrateBatch |
MaterialTreeSpecies | Tree species composition for wood-based products | Embedded in MaterialSubstrateBatch |
MaterialRiskAssessment | EUDR risk assessment documentation | Embedded in MaterialSubstrateBatch |
MaterialLegalCompliance | Legal compliance verification for country of production | Embedded in MaterialSubstrateBatch |
MaterialComplianceDocument | Supporting compliance documentation (certificates, permits) | Embedded in MaterialSubstrateBatch |
Key Enums
| Enum | Purpose | Schema Reference |
|---|---|---|
MaterialsComplianceStatusEnum | Batch compliance workflow states | MaterialsComplianceStatusEnum |
MaterialsEudrRiskLevelEnum | EUDR risk levels (NEGLIGIBLE, LOW, STANDARD, HIGH) | MaterialsEudrRiskLevelEnum |
ComplianceDdsConclusionEnum | DDS conclusion types | ComplianceDdsConclusionEnum |
ComplianceDdsStatusEnum | DDS workflow states | ComplianceDdsStatusEnum |
MaterialsCertificationTypeEnum | Environmental certifications (FSC, PEFC, etc.) | MaterialsCertificationTypeEnum |
MaterialsGeolocationMethodEnum | How coordinates were determined | MaterialsGeolocationMethodEnum |
MaterialsUnitOfMeasureEnum | Units for quantities | MaterialsUnitOfMeasureEnum |
Mutations
| Mutation | Purpose | Schema Reference |
|---|---|---|
createSubstrateBatch | Register a new substrate batch delivery | CreateSubstrateBatchInput |
updateSubstrateBatch | Update batch information or compliance status | UpdateSubstrateBatchInput |
approveSubstrateBatchCompliance | Mark batch as compliant after review | ApproveSubstrateBatchComplianceInput |
createDueDiligenceStatement | Create a new DDS | CreateDueDiligenceStatementInput |
updateDueDiligenceStatement | Update DDS details | UpdateDueDiligenceStatementInput |
submitDueDiligenceStatement | Submit DDS to authorities | SubmitDueDiligenceStatementResult |
addDdsSubstrateBatch | Link a substrate batch to a DDS | AddDdsSubstrateBatchInput |
deleteDdsSubstrateBatch | Remove a batch from a DDS | DeleteDdsSubstrateBatchResult |
addDdsComponent | Link a finished component to a DDS | AddDdsComponentInput |
createMaterialOperator | Register a supply chain operator | CreateMaterialOperatorInput |
createBatchUsage | Record usage of substrate from a batch | CreateBatchUsageInput |
Queries
| Query | Purpose | Schema Reference |
|---|---|---|
listMaterialSubstrateBatches | Query substrate batches with filtering | MaterialSubstrateBatchFilterInput |
listDueDiligenceStatements | Query DDS records | ComplianceDueDiligenceStatementFilterInput |
listMaterialOperators | Query supply chain operators | MaterialOperatorFilterInput |
For complete schema documentation, browse the full GraphQL Schema Reference.