Implementing DPP API Integration: A Step-by-Step Guide
Integrating Digital Product Passports into your existing tech stack doesn't require a rip-and-replace approach. Most brands already have the core product data — it just needs to be structured, enriched, and connected to a DPP platform.
This guide walks through a practical integration using Veribl's API, but the concepts apply to any DPP implementation.
Prerequisites
Before starting, you'll need:
- API credentials from your DPP provider
- Access to your Product Information Management (PIM) system
- A product catalog with at least basic attributes (name, SKU, category, description)
Step 1: Connect Your Product Data
The first step is syncing your product catalog. Most integrations start with a bulk import followed by real-time sync.
Bulk Import
Use the Products API to create product templates from your existing catalog:
curl -X POST https://api.veribl.com/v1/products \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Merino Wool Sweater",
"sku": "MWS-001",
"category": "textiles",
"materials": [
{ "name": "Merino Wool", "percentage": 95, "origin": "New Zealand" },
{ "name": "Elastane", "percentage": 5, "origin": "Germany" }
],
"care_instructions": {
"washing": "Hand wash cold (30°C max)",
"drying": "Lay flat to dry",
"ironing": "Low heat if needed"
}
}'Real-Time Sync
Set up a webhook from your PIM to push product updates automatically:
// Webhook handler for PIM product updates
app.post("/webhooks/pim-sync", async (req, res) => {
const { product_id, updated_fields } = req.body
// Map PIM fields to DPP schema
const dppUpdate = mapToDppSchema(updated_fields)
// Update the product template
await veribl.products.update(product_id, dppUpdate)
res.status(200).json({ synced: true })
})Step 2: Enrich with Sustainability Data
Raw product data from your PIM typically lacks the sustainability metrics ESPR requires. You'll need to add:
Carbon Footprint
Calculate or obtain lifecycle emissions data for each product category:
const carbonData = {
total_kg_co2e: 12.4,
breakdown: {
raw_materials: 5.2,
manufacturing: 3.1,
transport: 2.8,
packaging: 1.3,
},
methodology: "ISO 14067:2018",
verified_by: "SGS",
}
await veribl.products.update(productId, {
carbon_footprint: carbonData,
})Repairability Score
If your product category requires a repairability index, calculate it based on disassembly, spare parts availability, and documentation:
const repairability = {
score: 7.2, // out of 10
criteria: {
disassembly: 8,
spare_parts: 6,
documentation: 9,
software_updates: 5,
},
}Step 3: Generate Passports
With product data enriched, generate passport instances for each unit:
// Generate passports for a production batch
const batch = await veribl.passports.createBatch({
product_id: "prod_mws001",
quantity: 10000,
batch_reference: "BATCH-2026-Q1-001",
manufactured_at: "2026-01-15",
facility: "Facility A, Porto, Portugal",
})
// Each passport gets a unique ID and QR code
// batch.passports[0].id => "dpp_a1b2c3d4"
// batch.passports[0].qr_code_url => "https://id.veribl.com/dpp_a1b2c3d4"Step 4: QR Code Integration
Each passport has a unique QR code that needs to be integrated into your physical product or packaging.
Downloading QR Codes
// Get QR code as SVG for print production
const qrCode = await veribl.passports.getQrCode("dpp_a1b2c3d4", {
format: "svg",
size: 300,
error_correction: "M",
quiet_zone: 4,
})
// Save for print production
fs.writeFileSync(`qr-codes/${passport.id}.svg`, qrCode.svg)Bulk Export for Print
For large batches, export all QR codes in a print-ready format:
curl -X POST https://api.veribl.com/v1/batches/BATCH-2026-Q1-001/qr-export \
-H "Authorization: Bearer $API_KEY" \
-d '{ "format": "pdf", "layout": "grid", "codes_per_page": 40 }'Step 5: Set Up Analytics
Track how consumers interact with your product passports:
Webhook for Scan Events
// Listen for scan events
app.post("/webhooks/veribl-scans", async (req, res) => {
const { passport_id, event_type, metadata } = req.body
if (event_type === "scan") {
await analytics.track("product_scan", {
passport_id,
product_id: metadata.product_id,
location: metadata.geo,
device: metadata.user_agent,
timestamp: metadata.scanned_at,
})
}
res.status(200).json({ received: true })
})Dashboard Integration
Pull aggregate analytics into your existing BI tools:
// Get scan analytics for the last 30 days
const analytics = await veribl.analytics.query({
product_id: "prod_mws001",
period: "30d",
metrics: ["scans", "unique_users", "avg_session_duration"],
group_by: "day",
})Step 6: Compliance Validation
Before going live, validate that your passports meet ESPR requirements:
const validation = await veribl.compliance.validate("dpp_a1b2c3d4")
// validation.status => "compliant" | "warnings" | "non_compliant"
// validation.checks => [
// { rule: "material_composition", status: "pass" },
// { rule: "carbon_footprint", status: "pass" },
// { rule: "repairability_score", status: "warning", message: "..." },
// ]Common Integration Patterns
ERP Integration
Connect order management to automatically generate passports when production orders are created. This ensures every manufactured unit gets a DPP before it ships.
E-commerce Integration
Embed passport viewers in product detail pages. When customers browse online, they can explore the full DPP before purchasing.
Retail Partner Integration
Share passport data with retail partners via API. Major retailers are increasingly requesting DPP data as part of their vendor onboarding.
Start your integration
Get API credentials and access our sandbox environment. Most integrations go live within 2 weeks.
Troubleshooting
QR codes not scanning reliably? Check minimum size (15mm), contrast ratio, and error correction level. Glossy or curved surfaces may need higher error correction.
Sync lag between PIM and DPP? Ensure your webhook endpoint responds within 5 seconds. For large catalogs, use batch sync with delta updates rather than full refreshes.
Compliance validation failing? Review the specific check that's failing. Most issues come from missing carbon footprint data or incomplete material composition (percentages must sum to 100%).
Ready to get started with Veribl?
Create compliant Digital Product Passports in minutes. Start free, scale as you grow.
Subscribe to our newsletter
Get the latest on product compliance and DPP best practices — delivered monthly.