---
title: "EU Digital Product Passports genereren via API — qr3.app Blog"
description: "De meeste DPP-handleidingen vertellen je wat een paspoort moet bevatten. Deze laat zien hoe je EU-conforme Digital Product Passports programmatisch aanmaakt — met curl, de qr3 SDK, batch-aanmaak, validatie, GS1 QR-codes en webhooks."
canonical: "https://qr3.app/nl/blog/dpp-api-generate-passports/"
lang: "nl"
robots: "index,follow,max-image-preview:large,max-snippet:-1"
---

# EU Digital Product Passports genereren via API — qr3.app Blog

> De meeste DPP-handleidingen vertellen je wat een paspoort moet bevatten. Deze laat zien hoe je EU-conforme Digital Product Passports programmatisch aanmaakt — met curl, de qr3 SDK, batch-aanmaak, validatie, GS1 QR-codes en webhooks.

Canonical: <https://qr3.app/nl/blog/dpp-api-generate-passports/>

[← Blog](/nl/blog/) [Tutorials](/nl/blog/category/tutorials/)

30 mei 2026 4 min leestijd [Tutorials](/nl/blog/category/tutorials/) [dpp](/nl/blog/tag/dpp/)[api](/nl/blog/tag/api/)[gs1-digital-link](/nl/blog/tag/gs1-digital-link/)[developers](/nl/blog/tag/developers/)[eu-2024-1781](/nl/blog/tag/eu-2024-1781/)

# EU Digital Product Passports genereren via API

De meeste DPP-handleidingen vertellen je wat een paspoort moet bevatten. Deze laat zien hoe je EU-conforme Digital Product Passports programmatisch aanmaakt — met curl, de qr3 SDK, batch-aanmaak, validatie, GS1 QR-codes en webhooks.

door **QR3 Redaktion**

![EU Digital Product Passports genereren via API](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/dpp-api-generate-passports/hero.png)

De meeste artikelen over het EU Digital Product Passport (DPP) leggen uit *wat* een paspoort moet bevatten. Veel minder laten zien *hoe* je er een aanmaakt — en bijna geen enkel laat zien hoe je dat doet voor een catalogus van 500 of 50.000 SKU's zonder 50.000 keer door een formulier te klikken.

Dit is de versie voor developers. Elke stap hieronder is een echte, werkende call tegen de qr3.app API (`https://qr3.app/v1`). Als je productdata beheert in een ERP, een PIM of een database, kun je DPP-generatie rechtstreeks in je bestaande pipeline inbouwen.

## Waarom een API belangrijk is voor DPP's

Een Digital Product Passport is geen eenmalig document. Onder de [Ecodesign for Sustainable Products Regulation (ESPR, EU 2024/1781)](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1781) en de [EU Battery Regulation 2023/1542](https://eur-lex.europa.eu/eli/reg/2023/1542/oj) heeft elke gereguleerde eenheid een paspoort nodig dat gedurende de hele levensduur actueel blijft. Voor een fabrikant betekent dat:

- **Schaal** — honderden tot tienduizenden producten, elk met zijn eigen GTIN/serienummer.

- **Actualiteit** — data (CO₂-voetafdruk, gerecycled materiaal, reparatie-informatie) verandert en moet worden bijgewerkt, niet opnieuw aangemaakt.

- **Integratie** — de bron van waarheid is je ERP/PIM, niet een webformulier.

Dat is een API-vraagstuk. Een handmatige webtool levert je de eerste tien paspoorten op; een API levert je ze allemaal.

## 1. Authenticatie

Elke aanvraag gebruikt een bearer-token (maak een API-sleutel aan in het dashboard). De basis-URL is `https://qr3.app/v1`.

```
curl https://qr3.app/v1/dpp \
  -H "Authorization: Bearer $QR3_API_KEY"
```

Of met de officiële SDK:

```
import { QR3 } from "@qr3/sdk";

const client = new QR3({ apiKey: process.env.QR3_API_KEY! });
```

## 2. Een batterijpaspoort aanmaken

Een DPP wordt aangemaakt met `POST /dpp`. De velden op het bovenste niveau zijn voor elke categorie hetzelfde; de categoriespecifieke data gaat in `battery_data`, `textile_data` of `general_data`.

```
curl -X POST https://qr3.app/v1/dpp \
  -H "Authorization: Bearer $QR3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "gtin": "09506000134376",
    "serial": "SN-00012345",
    "product_name": "PowerCell 5 kWh LFP",
    "manufacturer": "ExampleTech GmbH",
    "origin_country": "DE",
    "category": "battery",
    "market_countries": ["DE", "FR", "AT"],
    "status": "live",
    "battery_data": {
      "capacity_kwh": 5,
      "carbon_footprint_kg": 62,
      "carbon_footprint_class": "B",
      "recycled_content_pct": 12,
      "recyclability_pct": 95,
      "manufacturer_warranty_years": 8,
      "lithium_content_pct": 6.5,
      "certifications": ["CE", "UN38.3"]
    }
  }'
```

Dezelfde call met de SDK:

```
const passport = await client.dpp.create({
  gtin: "09506000134376",
  serial: "SN-00012345",
  product_name: "PowerCell 5 kWh LFP",
  manufacturer: "ExampleTech GmbH",
  origin_country: "DE",
  category: "battery",
  market_countries: ["DE", "FR", "AT"],
  battery_data: {
    capacity_kwh: 5,
    carbon_footprint_kg: 62,
    recycled_content_pct: 12,
    recyclability_pct: 95,
    manufacturer_warranty_years: 8,
  },
});

console.log(passport.id);      // dpp_xxxxxxxx
console.log(passport.qr.svg);  // print-ready GS1 Digital Link QR
```

Het antwoord bevat een landingspagina voor consumenten (gelokaliseerd in 25 EU-talen) en een **GS1 Digital Link** QR-code die klaar is om op een label te printen — geen aparte QR-stap nodig.

## 3. Valideren vóór je aanmaakt

Wil je ontbrekende of ongeldige velden opvangen voordat je iets persisteert? `POST /dpp/validate` voert exact dezelfde EU-validatieregels uit zonder iets aan te maken. Ideaal als pre-commit-check in CI.

```
const result = await client.dpp.validate({
  gtin: "09506000134376",
  product_name: "PowerCell 5 kWh LFP",
  manufacturer: "ExampleTech GmbH",
  origin_country: "DE",
  category: "battery",
  battery_data: {
    capacity_kwh: 5,
    carbon_footprint_kg: 62,
    recycled_content_pct: 12,
    recyclability_pct: 95,
    manufacturer_warranty_years: 8,
  },
});

if (!result.valid) {
  console.error(result.errors);
  // [{ field: "battery_data.recyclability_pct", message: "..." }]
}
```

## 4. Een hele catalogus in batch aanmaken

Voor een productcatalogus stuur je tot **100 paspoorten per aanvraag** naar `POST /dpp/batch`. Loop over je ERP-export en je hebt je volledige assortiment binnen enkele minuten.

```
const items = products.map((p) => ({
  gtin: p.gtin,
  serial: p.serial,
  product_name: p.name,
  manufacturer: "ExampleTech GmbH",
  origin_country: "DE",
  category: "battery" as const,
  battery_data: {
    capacity_kwh: p.capacityKwh,
    carbon_footprint_kg: p.co2Kg,
    recycled_content_pct: p.recycledPct,
    recyclability_pct: p.recyclablePct,
    manufacturer_warranty_years: p.warrantyYears,
  },
}));

// Chunk into batches of 100
const result = await client.dpp.batch({ items: items.slice(0, 100) });
```

## 5. De QR-code ophalen om labels te printen

Elk paspoort stelt zijn GS1 Digital Link QR beschikbaar in vier printformaten. Haal ze op via het paspoortobject of rechtstreeks:

```
curl https://qr3.app/v1/dpp/dpp_xxxxxxxx/qr.svg \
  -H "Authorization: Bearer $QR3_API_KEY" -o label.svg
```

`qr.svg`, `qr.png`, `qr.pdf` en `qr.eps` zijn allemaal beschikbaar — SVG/EPS voor je labelprinter, PNG voor het web.

## 6. Data actueel houden (zonder de QR te breken)

De GTIN/serienummer/lot zijn **onveranderlijk** na het aanmaken — dat houdt de geprinte GS1-URI voor altijd stabiel. Al het overige kan worden bijgewerkt met `PUT /dpp/{id}`:

```
await client.dpp.update(passport.id, {
  battery_data: {
    capacity_kwh: 5,
    carbon_footprint_kg: 58, // re-measured, lower footprint
    recycled_content_pct: 16, // 2031 target reached early
    recyclability_pct: 95,
    manufacturer_warranty_years: 8,
  },
});
```

De QR op het fysieke product verandert nooit; de data erachter wel. Dat is precies het idee van een *dynamisch* paspoort.

## 7. Indienen bij het EU-register

Wanneer het centrale EU DPP-register van toepassing is op jouw product, dien je een paspoort in met één call (Business-abonnement en hoger):

```
const reg = await client.dpp.registerForEuRegistry(passport.id);
console.log(reg.data.eu_registry_status);          // "pending"
console.log(reg.data.registry_request_id);
```

> **Stand vandaag:** De EU heeft de API van haar centrale DPP-register nog niet gepubliceerd. Tot die tijd is deze aanroep een testpad — de status blijft `pending`, en geen enkele autoriteit ontvangt het paspoort. Zodra de API live is, wordt dezelfde aanroep een echte registratie.

## 8. Reageren op scans met webhooks

DPP-scans zijn events. Abonneer je op `qr.scanned` en je kunt ze rechtstreeks in je analytics streamen, herbestellingen triggeren of een recall markeren — in realtime. Payloads zijn ondertekend (HMAC-SHA256); verifieer altijd de handtekening.

```
import { createHmac, timingSafeEqual } from "crypto";

app.post("/webhooks/qr3", express.raw({ type: "application/json" }), (req, res) => {
  const expected = createHmac("sha256", secret).update(req.body).digest("hex");
  const expectedBytes = Buffer.from(`sha256=${expected}`);
  const receivedBytes = Buffer.from(String(req.headers["x-qr3-signature"] ?? ""));
  const ok =
    expectedBytes.length === receivedBytes.length &&
    timingSafeEqual(expectedBytes, receivedBytes);
  if (!ok) return res.sendStatus(401);

  const event = JSON.parse(req.body.toString("utf8"));
  if (event.type === "qr.scanned") {
    console.log(event.data.country, event.data.dpp_id);
  }
  res.sendStatus(200);
});
```

## Alles bij elkaar: DPP-generatie in CI

De eindsituatie die de meeste fabrikanten willen: productdata leeft in het ERP/PIM en een geplande job houdt de paspoorten gesynchroniseerd.

1. Exporteer gewijzigde producten uit je ERP.

2. `client.dpp.validate(...)` voor elk product — laat de build falen bij validatiefouten.

3. `client.dpp.batch(...)` voor nieuwe producten; `client.dpp.update(...)` voor gewijzigde.

4. Push de teruggegeven `qr.svg`-URL's naar je labelprintsysteem.

Geen webformulier, geen copy-paste, geen drift tussen je masterdata en je paspoorten.

## FAQ

**Heb ik een aparte QR-codetool nodig?**
Nee. Elk DPP retourneert een GS1 Digital Link QR in SVG/PNG/PDF/EPS. De QR *is* het toegangspunt tot het paspoort.

**Kan ik een paspoort bijwerken nadat het label is geprint?**
Ja — dat is het kernidee. GTIN/serienummer zijn onveranderlijk, zodat de geprinte URI geldig blijft; alle datavelden zijn aanpasbaar via `PUT /dpp/{id}`.

**Hoeveel paspoorten kan ik in één keer aanmaken?**
Tot 100 per `POST /dpp/batch`-aanvraag. Splits grotere catalogi in chunks; de limiet is 60 aanvragen per minuut per API-sleutel, voor elk plan.

**Welke categorieën worden ondersteund?**
`battery` en `textile` worden vandaag geleverd met volledige EU-validatie; `general` dekt overige producttypen. Battery en textile bevatten een live EU-conformiteitscontrole (ESPR / AGEC).

## Bronnen

- [ESPR — Regulation (EU) 2024/1781](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1781)

- [EU Battery Regulation 2023/1542](https://eur-lex.europa.eu/eli/reg/2023/1542/oj)

- [GS1 Digital Link](https://www.gs1.org/standards/gs1-digital-link)

**Begin gratis** en maak je eerste DPP aan via de API: [app.qr3.app/sign-up](https://app.qr3.app/sign-up)

## Gerelateerde artikelen

- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/gs1-resolver-test-suite-dpp-links/hero.png) Tutorials GS1 Resolver Test Suite: DPP-links vóór de livegang betrouwbaar testen De stabiele GS1-testsuite maakt Resolver 1.2 toetsbaar. Zo test u redirects, linksets, CORS, talen en foutgevallen vóór de livegang.](/nl/blog/gs1-resolver-test-suite-dpp-links/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/dpp-battery-passport-2027-20260715/hero.png) Branche-nieuws BatteryPass-Ready start testomgeving voor het digitale batterijpaspoort Het consortium BatteryPass-Ready heeft op 24 juni 2026 een openbare testomgeving voor het digitale batterijpaspoort gestart, met het oog op de EU-verplichting vanaf februari 2027.](/nl/blog/dpp-battery-passport-2027-20260715/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/sector-20260713/hero.png) Branche-nieuws Digitale batterijpas 2027: wat fabrikanten nu moeten weten Webinars, opensourcetools en nieuwe normen: de EU-batterijpas komt op stoom. Een overzicht van de stand van zaken in juli 2026 en de openstaande vragen tot februari 2027.](/nl/blog/sector-20260713/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/sector-20260711/hero.png) Branche-nieuws Digitale batterijpas 2026: testomgevingen, normen en open vragen Waar staat de industrie met de digitale batterijpas? Een overzicht van testomgevingen, CEN/CENELEC-normen, opensourcetools en regelgevende koersbepalingen in juli 2026.](/nl/blog/sector-20260711/)

[← Alle artikelen](/nl/blog/) [Gratis starten](https://app.qr3.app/sign-up)
