# 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 ```mermaid graph LR A[Import Order] --> B[Run Risk Assessment] B --> C{Risk Level} C -->|Low| D[Create DDS] C -->|High| E[Gather Evidence] E --> F[Upload Documents] F --> B D --> G[Submit to Authorities] ``` ## Step 1: Create Risk Assessment First, assess the EUDR risk for your order: ```bash 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:** ```json { "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: ```bash 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: ```bash 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: ```bash # 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: ```bash 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 ```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 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: ```python @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): ```python 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: ```python 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 ```python 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 ```python 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](/eudr-api#operation/compliance_risk-assessments_create) - `POST /eudr/trace-orders/` - [EUDR API](/eudr-api#operation/eudr_trace-orders_create) - `POST /eudr/due-diligence-statements/` - [EUDR API](/eudr-api#operation/eudr_due-diligence-statements_create) - `POST /documents/` - [EUDR API](/eudr-api#operation/documents_create) - `POST /compliance/risk-assessments/{id}/evidence-downloads/` - [EUDR API](/eudr-api#operation/compliance_risk-assessments_evidence-downloads_create) ## Next Steps - [Supply Chain Management →](/use-cases/supply-chain-management) - [EUDR API Reference →](/eudr-api) - [Authentication Guide →](/getting-started/authentication)