Implementing DPP API Integration: A Step-by-Step Guide

·5 min read
MP

Maris Purgailis

Co-founder & CEO

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.