---
title: "Luo EU:n digitaalisia tuotepasseja API:n kautta — qr3.app Blog"
description: "Useimmat DPP-oppaat kertovat, mitä passin on sisällettävä. Tämä opas näyttää, miten EU-yhteensopivia digitaalisia tuotepasseja luodaan ohjelmallisesti — curlilla, qr3-SDK:lla, eräluonnilla, validoinnilla, GS1-QR-koodeilla ja webhookeilla."
canonical: "https://qr3.app/fi/blog/dpp-api-generate-passports/"
lang: "fi"
robots: "index,follow,max-image-preview:large,max-snippet:-1"
---

# Luo EU:n digitaalisia tuotepasseja API:n kautta — qr3.app Blog

> Useimmat DPP-oppaat kertovat, mitä passin on sisällettävä. Tämä opas näyttää, miten EU-yhteensopivia digitaalisia tuotepasseja luodaan ohjelmallisesti — curlilla, qr3-SDK:lla, eräluonnilla, validoinnilla, GS1-QR-koodeilla ja webhookeilla.

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

[← Blogi](/fi/blog/) [Tutoriaalit](/fi/blog/category/tutorials/)

30. toukokuuta 2026 4 min lukuaika [Tutoriaalit](/fi/blog/category/tutorials/) [dpp](/fi/blog/tag/dpp/)[api](/fi/blog/tag/api/)[gs1-digital-link](/fi/blog/tag/gs1-digital-link/)[developers](/fi/blog/tag/developers/)[eu-2024-1781](/fi/blog/tag/eu-2024-1781/)

# Luo EU:n digitaalisia tuotepasseja API:n kautta

Useimmat DPP-oppaat kertovat, mitä passin on sisällettävä. Tämä opas näyttää, miten EU-yhteensopivia digitaalisia tuotepasseja luodaan ohjelmallisesti — curlilla, qr3-SDK:lla, eräluonnilla, validoinnilla, GS1-QR-koodeilla ja webhookeilla.

kirjoittanut **QR3 Redaktion**

![Luo EU:n digitaalisia tuotepasseja API:n kautta](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/dpp-api-generate-passports/hero.png)

Useimmat EU:n digitaalista tuotepassia (DPP) käsittelevät artikkelit selittävät, *mitä* passin on sisällettävä. Paljon harvemmat näyttävät, *miten* sellainen luodaan — ja lähes mikään ei näytä, miten se tehdään 500 tai 50 000 tuotekoodin (SKU) luettelolle ilman, että lomaketta täytetään 50 000 kertaa klikkaamalla.

Tämä opas on kehittäjän versio. Jokainen alla oleva vaihe on todellinen, toimiva kutsu qr3.app-API:a vastaan (`https://qr3.app/v1`). Jos hallinnoit tuotetietoja ERP-järjestelmässä, PIM-järjestelmässä tai tietokannassa, voit kytkeä DPP-luonnin suoraan olemassa olevaan putkeesi.

## Miksi API on tärkeä DPP:lle

Digitaalinen tuotepassi ei ole kertaluonteinen asiakirja. [Kestävien tuotteiden ekologista suunnittelua koskevan asetuksen (ESPR, EU 2024/1781)](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1781) ja [EU:n akkuasetuksen 2023/1542](https://eur-lex.europa.eu/eli/reg/2023/1542/oj) nojalla jokainen säännelty yksikkö tarvitsee passin, joka pysyy ajan tasalla koko elinkaarensa ajan. Valmistajalle se tarkoittaa:

- **Skaala** — sadoista kymmeniin tuhansiin tuotteisiin, joista jokaisella on oma GTIN/sarjanumero.

- **Tuoreus** — tiedot (hiilijalanjälki, kierrätetyn materiaalin osuus, korjaustiedot) muuttuvat ja ne on päivitettävä, ei luotava uudelleen.

- **Integraatio** — totuuden lähde on ERP/PIM-järjestelmäsi, ei verkkolomake.

Se on API-ongelma. Manuaalinen verkkotyökalu vie sinut kymmeneen ensimmäiseen passiin; API hankkii ne kaikki.

## 1. Todennus

Jokainen pyyntö käyttää bearer-tunnusta (luo API-avain hallintapaneelissa). Perus-URL on `https://qr3.app/v1`.

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

Tai virallisen SDK:n kanssa:

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

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

## 2. Luo akkupassi

DPP luodaan komennolla `POST /dpp`. Ylimmän tason kentät ovat samat jokaiselle kategorialle; kategoriakohtaiset tiedot sijoitetaan kenttiin `battery_data`, `textile_data` tai `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"]
    }
  }'
```

Sama kutsu SDK:n kanssa:

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

Vastaus sisältää kuluttajalle suunnatun aloitussivun (lokalisoituna 25 EU-kielelle) ja **GS1 Digital Link** -QR-koodin, joka on valmis etikettien tulostukseen — erillistä QR-vaihetta ei tarvita.

## 3. Validoi ennen luontia

Haluatko napata puuttuvat tai virheelliset kentät ennen tallennusta? `POST /dpp/validate` suorittaa täsmälleen samat EU:n validointisäännöt luomatta mitään. Ihanteellinen pre-commit-tarkistuksena CI:ssä.

```
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. Luo koko luettelo eränä

Tuoteluetteloa varten voit lähettää enintään **100 passia per pyyntö** osoitteeseen `POST /dpp/batch`. Käy läpi ERP-vientisi silmukassa, ja koko valikoimasi on valmiina minuuteissa.

```
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. Hae QR-koodi etikettien tulostukseen

Jokainen passi tarjoaa GS1 Digital Link -QR-koodinsa neljässä tulostusmuodossa. Hae ne passiobjektin kautta tai suoraan:

```
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` ja `qr.eps` ovat kaikki saatavilla — SVG/EPS etikettitulostimellesi, PNG verkkoon.

## 6. Pidä tiedot ajan tasalla (rikkomatta QR-koodia)

GTIN/sarjanumero/erä ovat **muuttumattomia** luonnin jälkeen — se pitää tulostetun GS1-URI:n pysyvänä ikuisesti. Kaikki muu voidaan päivittää komennolla `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,
  },
});
```

Fyysisessä tuotteessa oleva QR-koodi ei koskaan muutu; sen takana olevat tiedot muuttuvat. Juuri se on *dynaamisen* passin koko idea.

## 7. Lähetä EU-rekisteriin

Kun EU:n keskitetty DPP-rekisteri koskee tuotettasi, lähetä passi yhdellä kutsulla (Business-tilaus ja siitä ylöspäin):

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

> **Tämänhetkinen tila:** EU ei ole vielä julkaissut keskitetyn DPP-rekisterinsä API-rajapintaa. Siihen asti tämä kutsu on testipolku — tila pysyy arvossa `pending`, eikä mikään viranomainen saa passia. Heti kun API on käytössä, samasta kutsusta tulee todellinen rekisteröinti.

## 8. Reagoi skannauksiin webhookeilla

DPP-skannaukset ovat tapahtumia. Tilaa `qr.scanned`, niin voit virrata ne analytiikkaasi, käynnistää uudelleentilauksia tai merkitä takaisinvedon — reaaliajassa. Hyötykuormat on allekirjoitettu (HMAC-SHA256); varmenna aina allekirjoitus.

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

## Kaikki yhteen: DPP-luonti CI:ssä

Lopputila, jonka useimmat valmistajat haluavat: tuotetiedot sijaitsevat ERP/PIM-järjestelmässä, ja ajastettu tehtävä pitää passit synkronoituina.

1. Vie muuttuneet tuotteet ERP-järjestelmästäsi.

2. `client.dpp.validate(...)` jokaiselle — kaada buildi validointivirheisiin.

3. `client.dpp.batch(...)` uusille tuotteille; `client.dpp.update(...)` muuttuneille.

4. Työnnä palautetut `qr.svg`-URL-osoitteet etikettitulostusjärjestelmääsi.

Ei verkkolomaketta, ei kopioi-liitä-työtä, ei eroavaisuuksia perustietojesi ja passiesi välillä.

## UKK

**Tarvitsenko erillisen QR-koodityökalun?**
En. Jokainen DPP palauttaa GS1 Digital Link -QR-koodin muodoissa SVG/PNG/PDF/EPS. QR *on* passin käyttöpiste.

**Voinko päivittää passia sen jälkeen, kun etiketti on tulostettu?**
Kyllä — se on ydinajatus. GTIN/sarjanumero ovat muuttumattomia, joten tulostettu URI pysyy voimassa; kaikki tietokentät ovat päivitettävissä komennolla `PUT /dpp/{id}`.

**Kuinka monta passia voin luoda kerralla?**
Enintään 100 per `POST /dpp/batch` -pyyntö. Pilko suuremmat luettelot osiin; rajoitus on 60 pyyntöä minuutissa API-avainta kohden kaikissa tilauksissa.

**Mitä kategorioita tuetaan?**
`battery` ja `textile` toimitetaan täydellä EU-validoinnilla jo tänään; `general` kattaa muut tuotetyypit. Akku ja tekstiili sisältävät reaaliaikaisen EU:n vaatimustenmukaisuustarkistuksen (ESPR / AGEC).

## Lähteet

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

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

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

**Aloita ilmaiseksi** ja luo ensimmäinen DPP:si API:n kautta: [app.qr3.app/sign-up](https://app.qr3.app/sign-up)

## Aiheeseen liittyvät artikkelit

- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/gs1-resolver-test-suite-dpp-links/hero.png) Tutoriaalit GS1 Resolver Test Suite: DPP-linkkien luotettava tarkistus ennen käyttöönottoa Vakaa GS1-testisarja mahdollistaa Resolver 1.2:n tarkistamisen. Näin testaat uudelleenohjaukset, linkkijoukot, CORSin, kielet ja virhetilanteet ennen käyttöönottoa.](/fi/blog/gs1-resolver-test-suite-dpp-links/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/dpp-battery-passport-2027-20260715/hero.png) Toimialauutiset BatteryPass-Ready käynnisti digitaalisen akkupassin testiympäristön BatteryPass-Ready-konsortio käynnisti 24. kesäkuuta 2026 julkisen digitaalisen akkupassin testiympäristön EU-velvoitteen lähestyessä helmikuussa 2027.](/fi/blog/dpp-battery-passport-2027-20260715/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/sector-20260713/hero.png) Toimialauutiset Digitaalinen akkupassi 2027: mitä valmistajien on nyt tiedettävä Webinaarit, avoimen lähdekoodin työkalut ja uudet standardit: EU:n akkupassi etenee. Katsaus heinäkuun 2026 tilanteeseen ja avoimiin kysymyksiin helmikuuhun 2027 asti.](/fi/blog/sector-20260713/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/sector-20260711/hero.png) Toimialauutiset Digitaalinen akkupassi 2026: testiympäristöt, standardit ja avoimet kysymykset Missä teollisuus on digitaalisen akkupassin käyttöönotossa? Katsaus testiympäristöihin, CEN/CENELEC-standardeihin, avoimen lähdekoodin työkaluihin ja sääntelyyn heinäkuussa 2026.](/fi/blog/sector-20260711/)

[← Kaikki artikkelit](/fi/blog/) [Aloita ilmaiseksi](https://app.qr3.app/sign-up)
