Skip to content
Last updated

EUDR Compliance Use Case

Learn how to use Coolset APIs to meet EU Deforestation Regulation requirements.

Overview

The EU Deforestation Regulation (EUDR) requires companies to prove that imported commodities don't contribute to deforestation. Coolset's EUDR API automates compliance workflows.

Compliance Workflow

Low
High
Import Order
Run Risk Assessment
Risk Level
Create DDS
Gather Evidence
Upload Documents
Submit to Authorities

Step 1: Create Risk Assessment

First, assess the EUDR risk for your order:

curl -X POST https://developers-pulse.coolset.com/api/compliance/risk-assessments/ \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "identifier": "ORDER-12345",
    "assessment_type": "eudr_order_assessment"
  }'

Response:

{
  "id": 789,
  "identifier": "ORDER-12345",
  "assessment_type": "eudr_order_assessment",
  "results": {
    "risk_level": "low",
    "risk_score": 0.15,
    "geolocation_verified": true,
    "deforestation_risk": false
  },
  "assessment_date": "2024-10-28T12:00:00Z"
}

Step 2: Trace Orders

Link orders to geographic origins:

curl -X POST https://developers-pulse.coolset.com/api/eudr/trace-orders/ \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "order_ids": [123, 456],
    "origin_country": "BR",
    "geolocation": {
      "latitude": -10.3333,
      "longitude": -53.2000
    }
  }'

Step 3: Create Due Diligence Statement

If risk is acceptable, create a DDS:

curl -X POST https://developers-pulse.coolset.com/api/eudr/due-diligence-statements/ \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "reference_number": "DDS-2024-001",
    "operator_name": "Your Company Ltd",
    "commodity_type": "coffee",
    "orders": [123, 456]
  }'

Step 4: Upload Supporting Documents

Add evidence to support your DDS:

# First, create document record
curl -X POST https://developers-pulse.coolset.com/api/documents/ \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Certificate of Origin.pdf",
    "content_type": "application/pdf"
  }'

# Then upload file using the returned URL
# (Upload URL returned in response)

Step 5: Download Evidence Package

Package all evidence for audit:

curl -X POST https://developers-pulse.coolset.com/api/compliance/risk-assessments/789/evidence-downloads/ \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  --output evidence-package.zip

Complete Example: Python

import requests

API_URL = "https://developers-pulse.coolset.com/api"
HEADERS = {
    "Authorization": "Bearer YOUR_API_TOKEN",
    "Content-Type": "application/json"
}

def eudr_compliance_workflow(order_id):
    # Step 1: Run risk assessment
    assessment = requests.post(
        f"{API_URL}/compliance/risk-assessments/",
        headers=HEADERS,
        json={
            "identifier": order_id,
            "assessment_type": "eudr_order_assessment"
        }
    ).json()
    
    print(f"Risk Level: {assessment['results']['risk_level']}")
    
    # Step 2: If low risk, create DDS
    if assessment['results']['risk_level'] == 'low':
        dds = requests.post(
            f"{API_URL}/eudr/due-diligence-statements/",
            headers=HEADERS,
            json={
                "reference_number": f"DDS-{order_id}",
                "operator_name": "Your Company",
                "commodity_type": "coffee",
                "orders": [order_id]
            }
        ).json()
        
        print(f"DDS Created: {dds['reference_number']}")
        return dds
    
    # Step 3: If high risk, flag for manual review
    else:
        print("High risk - manual review required")
        return None

# Run workflow
result = eudr_compliance_workflow("ORDER-12345")

Key Concepts

Risk Levels

LevelScoreAction Required
Low0.0 - 0.3Proceed with DDS
Medium0.3 - 0.7Additional checks required
High0.7 - 1.0Enhanced due diligence

Assessment Types

  • eudr_order_assessment - Assess entire order
  • eudr_order_item_assessment - Assess individual items
  • eudr_origin_assessment - Assess geographic origin
  • eudr_supply_chain_assessment - Assess full supply chain

Required Information

For EUDR compliance, you need:

✅ Commodity type and quantity
✅ Country of production
✅ Geolocation coordinates (min 4 decimal places)
✅ Harvest date
✅ Supplier information
✅ Certificate of origin

Best Practices

1. Automate Risk Assessments

Run assessments automatically when orders are created:

@app.route('/webhook/order-created', methods=['POST'])
def handle_order_created():
    order = request.json
    
    # Automatically run EUDR assessment
    assessment = run_eudr_assessment(order['id'])
    
    if assessment['risk_level'] != 'low':
        send_alert_to_compliance_team(order, assessment)
    
    return {'status': 'processed'}

2. Track Geolocation Accuracy

Ensure coordinates meet EUDR requirements (4 decimal places = ~11m accuracy):

def validate_geolocation(lat, lon):
    # Check decimal precision
    lat_precision = len(str(lat).split('.')[-1])
    lon_precision = len(str(lon).split('.')[-1])
    
    return lat_precision >= 4 and lon_precision >= 4

3. Maintain Evidence Packages

Download and archive evidence packages regularly:

import schedule

def archive_evidence_monthly():
    assessments = get_monthly_assessments()
    
    for assessment in assessments:
        package = download_evidence_package(assessment['id'])
        store_in_archive(package, assessment['identifier'])

# Run on first day of each month
schedule.every().month.at("00:00").do(archive_evidence_monthly)

Compliance Checklist

Use this checklist to ensure EUDR compliance:

  • All orders have risk assessments
  • Geographic origins are documented
  • Geolocations meet precision requirements
  • Harvest dates are recorded
  • Supplier due diligence completed
  • Supporting documents uploaded
  • DDS created for compliant orders
  • Evidence packages archived
  • Non-compliant orders flagged
  • Regular compliance audits scheduled

Common Issues

Issue: Insufficient Geolocation Data

Solution: Request precise coordinates from suppliers upfront

def validate_supplier_data(data):
    required_fields = [
        'geolocation.latitude',
        'geolocation.longitude',
        'harvest_date',
        'certificate_url'
    ]
    
    missing = [f for f in required_fields if not data.get(f)]
    
    if missing:
        send_data_request_to_supplier(missing)
        return False
    
    return True

Issue: High Risk Assessment

Solution: Gather additional evidence and re-assess

def handle_high_risk(assessment):
    # Request additional documentation
    documents_needed = [
        'Certificate of Origin',
        'Deforestation-Free Declaration',
        'Satellite Imagery',
        'Chain of Custody Documentation'
    ]
    
    request_documents_from_supplier(documents_needed)
    
    # Schedule manual review
    create_compliance_task(assessment['id'], 'high_risk_review')

API Endpoints Used

This use case demonstrates:

  • POST /compliance/risk-assessments/ - EUDR API
  • POST /eudr/trace-orders/ - EUDR API
  • POST /eudr/due-diligence-statements/ - EUDR API
  • POST /documents/ - EUDR API
  • POST /compliance/risk-assessments/{id}/evidence-downloads/ - EUDR API

Next Steps