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
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
| Level | Score | Action Required |
|---|---|---|
| Low | 0.0 - 0.3 | Proceed with DDS |
| Medium | 0.3 - 0.7 | Additional checks required |
| High | 0.7 - 1.0 | Enhanced due diligence |
Assessment Types
eudr_order_assessment- Assess entire ordereudr_order_item_assessment- Assess individual itemseudr_origin_assessment- Assess geographic origineudr_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/- Compliance APIPOST /eudr/trace-orders/- Supply Chain APIPOST /eudr/due-diligence-statements/- Supply Chain APIPOST /documents/- Data APIPOST /compliance/risk-assessments/{id}/evidence-downloads/- Compliance API