---
title: "Skapa EU:s digitala produktpass via API — qr3.app Blog"
description: "De flesta DPP-guider berättar vad ett pass måste innehålla. Den här visar hur du skapar EU-kompatibla digitala produktpass programmatiskt — med curl, qr3-SDK:n, batch-skapande, validering, GS1 QR-koder och webhooks."
canonical: "https://qr3.app/sv/blog/dpp-api-generate-passports/"
lang: "sv"
robots: "index,follow,max-image-preview:large,max-snippet:-1"
---

# Skapa EU:s digitala produktpass via API — qr3.app Blog

> De flesta DPP-guider berättar vad ett pass måste innehålla. Den här visar hur du skapar EU-kompatibla digitala produktpass programmatiskt — med curl, qr3-SDK:n, batch-skapande, validering, GS1 QR-koder och webhooks.

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

[← Blogg](/sv/blog/) [Guider](/sv/blog/category/tutorials/)

30 maj 2026 4 min läsning [Guider](/sv/blog/category/tutorials/) [dpp](/sv/blog/tag/dpp/)[api](/sv/blog/tag/api/)[gs1-digital-link](/sv/blog/tag/gs1-digital-link/)[developers](/sv/blog/tag/developers/)[eu-2024-1781](/sv/blog/tag/eu-2024-1781/)

# Skapa EU:s digitala produktpass via API

De flesta DPP-guider berättar vad ett pass måste innehålla. Den här visar hur du skapar EU-kompatibla digitala produktpass programmatiskt — med curl, qr3-SDK:n, batch-skapande, validering, GS1 QR-koder och webhooks.

av **QR3 Redaktion**

![Skapa EU:s digitala produktpass via API](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/dpp-api-generate-passports/hero.png)

De flesta artiklar om EU:s digitala produktpass (DPP) förklarar *vad* ett pass måste innehålla. Långt färre visar dig *hur* du skapar ett — och nästan ingen visar hur du gör det för en katalog med 500 eller 50 000 SKU:er utan att klicka dig igenom ett formulär 50 000 gånger.

Den här guiden är utvecklarversionen. Varje steg nedan är ett verkligt, fungerande anrop mot qr3.app-API:et (`https://qr3.app/v1`). Om du hanterar produktdata i ett affärssystem, ett PIM eller en databas kan du koppla in DPP-genereringen direkt i din befintliga pipeline.

## Varför ett API spelar roll för DPP:er

Ett digitalt produktpass är inte ett engångsdokument. Enligt [ekodesignförordningen för hållbara produkter (ESPR, EU 2024/1781)](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1781) och [EU:s batteriförordning 2023/1542](https://eur-lex.europa.eu/eli/reg/2023/1542/oj) behöver varje reglerad enhet ett pass som hålls aktuellt under hela sin livslängd. För en tillverkare innebär det:

- **Skala** — hundratals till tiotusentals produkter, var och en med sin egen GTIN/serie.

- **Aktualitet** — data (koldioxidavtryck, återvunnet innehåll, reparationsinformation) ändras och måste uppdateras, inte skapas på nytt.

- **Integration** — sanningskällan är ditt affärssystem/PIM, inte ett webbformulär.

Det är ett API-problem. Ett manuellt webbverktyg ger dig de första tio passen; ett API ger dig alla.

## 1. Autentisering

Varje begäran använder en bearer-token (skapa en API-nyckel i instrumentpanelen). Bas-URL:en är `https://qr3.app/v1`.

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

Eller med den officiella SDK:n:

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

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

## 2. Skapa ett batteripass

Ett DPP skapas med `POST /dpp`. Fälten på toppnivå är desamma för varje kategori; den kategorispecifika datan läggs i `battery_data`, `textile_data` eller `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"]
    }
  }'
```

Samma anrop med SDK:n:

```
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
```

Svaret inkluderar en konsumentvänd landningssida (lokaliserad till 25 EU-språk) och en **GS1 Digital Link**-QR-kod redo för etikettutskrift — inget separat QR-steg krävs.

## 3. Validera innan du skapar

Vill du fånga saknade eller ogiltiga fält innan du sparar? `POST /dpp/validate` kör exakt EU:s valideringsregler utan att skapa något. Idealiskt som en pre-commit-kontroll i 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. Batch-skapa en hel katalog

För en produktkatalog skickar du upp till **100 pass per begäran** till `POST /dpp/batch`. Loopa över din affärssystemsexport och du har hela ditt sortiment på några minuter.

```
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. Hämta QR-koden för etikettutskrift

Varje pass exponerar sin GS1 Digital Link-QR i fyra utskriftsformat. Hämta dem via passobjektet eller direkt:

```
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` och `qr.eps` är alla tillgängliga — SVG/EPS för din etikettskrivare, PNG för webben.

## 6. Håll datan aktuell (utan att förstöra QR-koden)

GTIN/serie/lot är **oföränderliga** efter skapandet — det håller den tryckta GS1-URI:n stabil för alltid. Allt annat kan uppdateras med `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,
  },
});
```

QR-koden på den fysiska produkten ändras aldrig; datan bakom den gör det. Det är hela poängen med ett *dynamiskt* pass.

## 7. Skicka in till EU-registret

När EU:s centrala DPP-register är aktuellt för din produkt skickar du in ett pass med ett enda anrop (Business-plan och uppåt):

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

> **Status i dag:** EU har ännu inte publicerat API:et för sitt centrala DPP-register. Fram till dess är detta anrop en testväg — statusen förblir `pending`, och ingen myndighet får passet. Så snart API:et är live blir samma anrop en verklig registrering.

## 8. Reagera på skanningar med webhooks

DPP-skanningar är händelser. Prenumerera på `qr.scanned` och du kan strömma dem in i din analys, utlösa ombeställningar eller flagga ett återkallande — i realtid. Nyttolaster är signerade (HMAC-SHA256); verifiera alltid signaturen.

```
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);
});
```

## Sätt ihop allt: DPP-generering i CI

Det sluttillstånd de flesta tillverkare vill ha: produktdata lever i affärssystemet/PIM:et, och ett schemalagt jobb håller passen synkroniserade.

1. Exportera ändrade produkter från ditt affärssystem.

2. `client.dpp.validate(...)` för var och en — låt bygget misslyckas vid valideringsfel.

3. `client.dpp.batch(...)` nya produkter; `client.dpp.update(...)` ändrade.

4. Skicka de returnerade `qr.svg`-URL:erna till ditt etikettutskriftssystem.

Inget webbformulär, ingen kopiera-klistra, ingen avvikelse mellan dina masterdata och dina pass.

## Vanliga frågor

**Behöver jag ett separat QR-kodverktyg?**
Nej. Varje DPP returnerar en GS1 Digital Link-QR i SVG/PNG/PDF/EPS. QR-koden *är* åtkomstpunkten till passet.

**Kan jag uppdatera ett pass efter att etiketten är tryckt?**
Ja — det är kärnidén. GTIN/serie är oföränderliga så den tryckta URI:n förblir giltig; alla datafält är uppdateringsbara via `PUT /dpp/{id}`.

**Hur många pass kan jag skapa på en gång?**
Upp till 100 per `POST /dpp/batch`-begäran. Dela upp större kataloger; gränsen är 60 begäranden per minut per API-nyckel, på alla planer.

**Vilka kategorier stöds?**
`battery` och `textile` levereras med fullständig EU-validering idag; `general` täcker andra produkttyper. Batteri och textil inkluderar en aktiv EU-efterlevnadskontroll (ESPR / AGEC).

## Källor

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

- [EU:s batteriförordning 2023/1542](https://eur-lex.europa.eu/eli/reg/2023/1542/oj)

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

**Börja kostnadsfritt** och skapa ditt första DPP via API: [app.qr3.app/sign-up](https://app.qr3.app/sign-up)

## Relaterade inlägg

- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/gs1-resolver-test-suite-dpp-links/hero.png) Guider GS1 Resolver Test Suite: DPP-länkar före produktionssättning tillförlitligt verifierade Den stabila GS1-testsviten gör Resolver 1.2 verifierbar. Så testar du omdirigeringar, länkset, CORS, språk och felsituationer före produktionssättning.](/sv/blog/gs1-resolver-test-suite-dpp-links/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/dpp-battery-passport-2027-20260715/hero.png) Branschnyheter BatteryPass-Ready lanserar testmiljö för det digitala batteripasset Konsortiet BatteryPass-Ready lanserade den 24 juni 2026 en offentlig testmiljö för det digitala batteripasset, inför EU-kravet från februari 2027.](/sv/blog/dpp-battery-passport-2027-20260715/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/sector-20260713/hero.png) Branschnyheter Digitalt batteripass 2027: Vad tillverkare nu måste veta Webbinarier, verktyg med öppen källkod och nya standarder: EU:s batteripass tar fart. En överblick över läget i juli 2026 och de obesvarade frågorna fram till februari 2027.](/sv/blog/sector-20260713/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/sector-20260711/hero.png) Branschnyheter Digitalt batteripass 2026: testmiljöer, standarder och öppna frågor Var står industrin när det gäller det digitala batteripasset? En översikt över testmiljöer, CEN/CENELEC-standarder, verktyg med öppen källkod och regulatoriska vägval i juli 2026.](/sv/blog/sector-20260711/)

[← Alla artiklar](/sv/blog/) [Kom igång gratis](https://app.qr3.app/sign-up)
