← veridyn.eu
HU EN

Fejlesztői API v1

veridyn

Programozott hozzáférés a termékútlevelekhez — webshop/ERP-szinkronhoz, tömeges automatizáláshoz.

Pro csomagtól

A nyílt béta alatt az API minden béta-fióknak elérhető — a Pro-korlát a béta után lép életbe.

Hitelesítés

Minden kérés API-kulccsal hitelesít, Authorization fejlécben:

Authorization: Bearer vk_<a kulcsod>

Kulcsot a Beállítások → Fejlesztői API alatt hozol létre. A nyílt kulcsot csak egyszer, létrehozáskor mutatjuk meg — tárold biztonságos helyen. A kulcs a teljes fiókod termékeihez ad írási/olvasási hozzáférést, ezért kezeld titkosan.

Gyors teszt böngészőben

A kulcs kizárólag az Authorization fejlécben megy — biztonsági okból nem URL-paraméterként (az bekerülne a böngésző-előzménybe és a szerver-logokba). Próbáld ki például curl-lel:

curl -H "Authorization: Bearer vk_<a kulcsod>" https://veridyn.eu/api/v1/categories

Kulcs-hatókör (scope)

Kulcs létrehozásakor hatókört választasz: Teljes (olvasás + írás) vagy Csak olvasás (read-only). A read-only kulcs kizárólag GET-et hívhat — POST/PATCH/DELETE esetén a válasz 403 read_only. ERP- vagy megjelenítő-integrációhoz használj read-only kulcsot.

Kérés-korlát (rate limit)

Kulcsonként, csomagtól függően 120–600 kérés / perc (Pro 120 · Business 300 · Enterprise 600; a nyílt béta alatt 300). Minden válasz tartalmazza az X-RateLimit-Limit, X-RateLimit-Remaining és X-RateLimit-Reset (unix idő) fejléceket. A limit átlépésekor a válasz 429 rate_limited, Retry-After fejléccel — várd meg a jelzett időt, majd próbáld újra.

Idempotencia

A POST kérésekhez adhatsz egy egyedi Idempotency-Key fejlécet. Ha ugyanazzal a kulccsal újraküldöd (pl. hálózati hiba után), a korábbi választ kapod vissza — nem jön létre duplikátum. A visszajátszott választ az Idempotency-Replayed: true fejléc jelzi.

OpenAPI

Gépi olvasható API-leírás (OpenAPI 3.1) — Postman-importhoz, SDK-/kód-generáláshoz:

https://veridyn.eu/api/v1/openapi.json

⚡ Interaktív API-referencia

Böngészhető, kereshető végpont-referencia — közvetlenül a fenti specből renderelve.

DPP-szótár (JSON-LD névtér)

A publikus útlevél gépi változata JSON-LD: a szabványos mezők schema.org-ról jönnek, a DPP-specifikus mezők pedig a dpp: névtérből. Ez a névtér feloldható — megnyitva megnézheted, mit jelent minden mező, Accept: application/ld+json fejléccel pedig a gépi @context dokumentumot adja.

https://veridyn.eu/ns/dpp/v1/

Egy útlevél gépi változata: a publikus URL ?format=jsonld paraméterrel (vagy Accept: application/ld+json fejléccel).

Postman-kollekció

Kész, importálható gyűjtemény (előre beállított változókkal + példa-kérésekkel). Import után csak töltsd ki a base_url és api_key gyűjtemény-változókat.

⬇ Postman-kollekció letöltése

Generálj saját SDK-t

Az OpenAPI-specből bármely nyelvre generálhatsz hivatalos klienst az openapi-generator-ral — nincs kézzel karbantartott SDK, mindig naprakész. Pl. PHP:

npx @openapitools/openapi-generator-cli generate \
  -i https://veridyn.eu/api/v1/openapi.json \
  -g php -o ./veridyn-sdk

A -g értéke lehet typescript-fetch, python, java és sok más.

Gyorsindító (kód)

PHP

$ch = curl_init('https://veridyn.eu/api/v1/products?limit=5');
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER     => ['Authorization: Bearer vk_...'],
]);
$products = json_decode(curl_exec($ch), true)['data'];

JavaScript (fetch)

const res = await fetch('https://veridyn.eu/api/v1/products?limit=5', {
  headers: { 'Authorization': 'Bearer vk_...' }
});
const { data } = await res.json();

Alap-URL

https://veridyn.eu/api/v1

A válaszok application/json formátumúak, UTF-8 kódolással.

Végpontok

MetódusÚtvonalLeírás
GET/categoriesElérhető termékkategóriák.
GET/schema/{category}A kategória teljes mezőlistája — kötelező + opcionális, típus, enum, nyelvi mezők.
GET/productsTermékek listája (összefoglaló). Paraméterek: q, status, page, limit.
POST/productsÚj termékútlevél. Törzs: { category, data }.
GET/products/{id}Egy termék teljes adata + passport-URL.
PATCH/products/{id}Frissítés (részleges) — új verziót hoz létre. Törzs: { data, change_type? }. A change_type opcionális: correction (a modellen volt rossz adat → a már kiadott tétel-/darab-útlevelek elavulnak, frissíthetők) vagy change (a termék változott adott dátumtól → a korábbi darabok adata helyes marad, nem írjuk felül).
GET/products/{id}/qrQR-kód (SVG) a publikus passporthoz.
GET/products/{id}/childrenA tétel/egység gyerek-útlevelek listája.
POST/products/{id}/childrenTétel/egység útlevél. Egy: { level, lot|serial, data } · tömeges: { level, items:[…] } (max 500). Örökli a szülő adatait.
GET/products/{id}/scansTermék-szintű beolvasás-összegző: total, unique, byCountry, byDevice. Paraméter: days=7|30|90|365.
GET/scansBérlő-szintű beolvasás-összegző: a fentiek + byCategory, byLevel.

Mit kell megadni? (kötelező vs. opcionális)

Minden kategóriának van egy kötelező magja — enélkül a séma-validáció elutasít (422). Minden más mező opcionális, de bármikor beküldheted ugyanabban a data objektumban (több adat = jobb passport + jövőbiztosabb megfelelés). A pontos, gépi mezőlistát a /schema/{category} adja — required: true/false, típus, enum és localized jelöléssel.

curl https://veridyn.eu/api/v1/schema/textile \
  -H "Authorization: Bearer vk_<kulcs>"

Összes mező kategóriánként

= kötelező · = opcionális · beágyazott al-mező · 🌐 nyelvenkénti (localized) · 🔒 csak hatósági szinten látszik. Ez a lista a sémából generálódik — mindig naprakész.

textile Textil és ruházat20 mező

MezőTípusKöt.Leírás
productNamestringTerméknév — A termék neve, ahogy a vásárló a passporton látni fogja.
skustringSKU — Belső cikkszám / azonosító — a te rendszeredből.
brandNamestringMárkanév
gtinstringGTIN (opcionális) — A vonalkód száma (GTIN-8/12/13/14). Az ellenőrzőszámot a rendszer validálja. Ha nincs, hagyd üresen.
commodityCodestringÁrukód (CN/HS, opcionális) — Vám-/tarifális besorolás: Kombinált Nómenklatúra (CN, 8 számjegy) vagy HS-kód. Az EU DPP-regiszter kötelező metaadata a regisztrációkor — a szállítói/vámpapírokon szerepel.
economicOperatorobjectGazdasági szereplő
  ↳ rolestring (enum)Szerep — Ki teszi a terméket az EU-piacra és felel érte. A legtöbb gyártónál: Gyártó. (manufacturer · importer · authorized_representative · distributor · dealer · fulfilment_service_provider)
  ↳ legalNamestringJogi név
  ↳ addressstringCím
  ↳ countrystringOrszág (ISO 3166-1 alpha-2) — Kétbetűs ISO országkód, nagybetűvel — pl. HU, DE, IT
  ↳ contactEmailstringKapcsolati e-mail — Ide fordulhat a vásárló vagy a hatóság.
  ↳ operatorIdstringEgyedi szereplő-azonosító (GS1 GLN) — 13 jegyű GS1 GLN — EU DPP egyedi gazdasági szereplő-azonosító. Ha nincs, hagyd üresen.
  ↳ eori 🔒stringEORI-szám — A gazdasági szereplő EORI-száma (vám / EU DPP-nyilvántartási azonosító) — a registry ez alapján azonosít. Csak hatósági hozzáférési szinten látszik. Ha nincs, hagyd üresen.
languagesarray[string]Nyelvek (BCP-47) — Mely nyelveken jelenjen meg a passport. A lokalizált mezőket (ápolás, életciklus) minden itt felsorolt nyelven ki kell tölteni. pl. hu, en
fiberCompositionarray[object]Rost-összetétel — Miből készült a termék. A százalékok összege pontosan 100 legyen. pl. pamut 95 + elasztán 5
  ↳ fiberstringRost
  ↳ percentagenumberSzázalék
recycledContentPercentagenumberÚjrahasznosított tartalom (%) — Az újrahasznosított anyag aránya a termékben. Ha nem releváns, hagyd üresen.
countryOfManufacturestringGyártás országa (ISO) — Ahol a végtermék készült. Kétbetűs ISO kód, pl. PT, TR, HU
supplyChainStagesarray[object]Ellátási lánc állomásai — Hol készült melyik munkafázis (fonás, szövés, festés, összeszerelés…). Opcionális, de növeli a bizalmat. A fázis és az ország nyilvános; az üzem neve és azonosítója védett — csak jogos érdekű fél (és hatóság) látja, token-linkkel.
  ↳ stagestring (enum)Fázis (spinning · weaving · knitting · dyeing · finishing · assembly)
  ↳ countrystringOrszág (ISO)
  ↳ facilityName 🔒stringÜzem neve
  ↳ facilityId 🔒stringEgyedi telephely-azonosító (GS1 GLN)
careInstructions 🌐objectÁpolási útmutató — Mosás, szárítás, vasalás — nyelvenként egy-egy szöveg.
repairobjectJavíthatóság — Javítható-e, és hogyan. A „javítható” és „alkatrész elérhető” mezők kötelezőek.
  ↳ repairablebooleanJavítható
  ↳ instructions 🌐objectJavítási útmutató — Hogyan javítható — nyelvenként (opcionális).
  ↳ sparePartsAvailablebooleanAlkatrész elérhető (pl. gomb, cipzár)
substancesOfConcernarray[object]Aggályos anyagok — Aggályos anyagok (pl. REACH SVHC), ha a termékben jelen vannak. A legtöbb terméknél üresen hagyható.
  ↳ namestringMegnevezés
  ↳ casNumberstringCAS-szám
  ↳ concentrationRangestringKoncentráció-tartomány
durabilityobjectTartósság — Tartóssági adatok, ha van mérésed (opcionális).
  ↳ testResultsstringTeszteredmények
  ↳ pefScorenumberPEF pontszám — Product Environmental Footprint pontszám, ha van. (opcionális)
carbonFootprintnumberSzénlábnyom (kg CO₂e) — A termék teljes szénlábnyoma kg CO₂-egyenértékben. Az „Impact” témában „≈ km autóval” összevetéssel jelenik meg.
waterFootprintnumberVízlábnyom (liter) — A gyártáshoz felhasznált víz mennyisége literben. Opcionális.
weightGramsnumberTömeg (gramm) — A termék tömege grammban. Opcionális.
endOfLifeobjectÉletciklus vége — Mi legyen a termékkel a használat után — nyelvenként kitöltve.
  ↳ recyclingInstructions 🌐objectÚjrahasznosítási útmutató — Hogyan hasznosítható újra — nyelvenként.
  ↳ disposalInstructions 🌐objectÁrtalmatlanítási útmutató — Ha nem újrahasznosítható — nyelvenként.
complianceDocumentsarray[object]Megfelelőségi dokumentumok — Tanúsítványok, megfelelőségi dokumentumok linkjei (opcionális). pl. OEKO-TEX, GOTS.
  ↳ typestringTípus
  ↳ urlstringURL

battery Akkumulátor27 mező

MezőTípusKöt.Leírás
productNamestringTerméknév — Az akkumulátor neve, ahogy a vásárló a passporton látni fogja.
skustringSKU — Belső cikkszám / azonosító — a te rendszeredből.
brandNamestringMárkanév
gtinstringGTIN (opcionális) — A vonalkód száma (GTIN-8/12/13/14). Az ellenőrzőszámot a rendszer validálja. Ha nincs, hagyd üresen.
commodityCodestringÁrukód (CN/HS, opcionális) — Vám-/tarifális besorolás: Kombinált Nómenklatúra (CN, 8 számjegy) vagy HS-kód. Az EU DPP-regiszter kötelező metaadata a regisztrációkor — a szállítói/vámpapírokon szerepel.
economicOperatorobjectGazdasági szereplő
  ↳ rolestring (enum)Szerep — Ki teszi a terméket az EU-piacra és felel érte. A legtöbb gyártónál: Gyártó. (manufacturer · importer · authorized_representative · distributor · dealer · fulfilment_service_provider)
  ↳ legalNamestringJogi név
  ↳ addressstringCím
  ↳ countrystringOrszág (ISO 3166-1 alpha-2) — Kétbetűs ISO országkód, nagybetűvel — pl. HU, DE, IT
  ↳ contactEmailstringKapcsolati e-mail — Ide fordulhat a vásárló vagy a hatóság.
  ↳ operatorIdstringEgyedi szereplő-azonosító (GS1 GLN) — 13 jegyű GS1 GLN — EU DPP egyedi gazdasági szereplő-azonosító. Ha nincs, hagyd üresen.
  ↳ eori 🔒stringEORI-szám — A gazdasági szereplő EORI-száma (vám / EU DPP-nyilvántartási azonosító) — a registry ez alapján azonosít. Csak hatósági hozzáférési szinten látszik. Ha nincs, hagyd üresen.
languagesarray[string]Nyelvek (BCP-47) — Mely nyelveken jelenjen meg a passport. A lokalizált mezőket (biztonság, életciklus) minden itt felsorolt nyelven ki kell tölteni. pl. hu, en
batteryCategorystring (enum)Akkumulátor-kategória — Az (EU) 2023/1542 szerinti kategória. A kötelező útlevél elsőként az EV, az ipari (>2 kWh) és az LMT akkukra vonatkozik (2027. február 18.). (portable · lmt · ev · industrial · sli)
cellChemistrystring (enum)Cellakémia — Az akkumulátor cellakémiai típusa. (nmc · nca · lfp · lmo · lto · nimh · lead_acid · sodium_ion …)
weightKgnumberTömeg (kg) — Az akkumulátor tömege kilogrammban.
countryOfManufacturestringGyártás országa (ISO) — Ahol az akku készült. Kétbetűs ISO kód, pl. DE, HU, CN
manufacturingDatestringGyártás dátuma / éve — A gyártás éve vagy év-hónapja, ISO formátumban: ÉÉÉÉ, ÉÉÉÉ-HH vagy ÉÉÉÉ-HH-NN.
ratedCapacitynumberNévleges kapacitás (Ah) — Névleges kapacitás amperóra (Ah).
energyWhnumberEnergia (Wh) — Teljes energiatartalom wattórában (Wh). Opcionális.
nominalVoltagenumberNévleges feszültség (V) — Névleges feszültség voltban. Opcionális.
expectedLifetimeCyclesnumberVárható élettartam (töltési ciklus) — A garantált / várható teljes töltési ciklusok száma. Opcionális.
stateOfHealth 🔒numberÁllapot — State of Health (%) — Az akku egészségi állapota az eredeti kapacitás %-ában (új akkunál 100). DARAB-SPECIFIKUS és dinamikus — ideális helye az egység-szint (nem a modell-template). Opcionális.
carbonFootprintnumberSzénlábnyom (kg CO₂e / kWh) — Az akku teljes életciklusra vetített szénlábnyoma, kg CO₂-egyenérték per kWh teljes energia.
carbonFootprintClassstringSzénlábnyom-teljesítményosztály (A–G) — A rendelet szerinti CF-teljesítményosztály, ha rendelkezésre áll. Opcionális.
carbonFootprintStudyUrlstringSzénlábnyom-tanulmány (URL) — A szénlábnyom-számítás alapjául szolgáló tanulmány / dokumentáció linkje (a CF-delegált aktus szerint). Opcionális.
carbonFootprintBreakdownarray[object]Szénlábnyom életciklus-szakaszonként — A szénlábnyom megbontása életciklus-szakaszokra (kg CO₂e / kWh) — a CF-delegált aktus ezt várja. Opcionális.
  ↳ stagestring (enum)Életciklus-szakasz (raw_material · main_production · distribution · recycling)
  ↳ valuenumberÉrték (kg CO₂e / kWh)
recycledContentarray[object]Újrahasznosított nyersanyag-tartalom — Az újrahasznosított kritikus nyersanyagok aránya anyagonként (kobalt, lítium, nikkel, ólom). Opcionális, de a rendelet egyre szigorúbban várja.
  ↳ materialstring (enum)Anyag (cobalt · lithium · nickel · lead)
  ↳ percentagenumberÚjrahasznosított arány (%)
hazardousSubstancesarray[object]Veszélyes anyagok — Az akkuban jelen lévő veszélyes anyagok (a higany, kadmium, ólom felett). A legtöbb adatlapnál releváns.
  ↳ namestringMegnevezés
  ↳ casNumberstringCAS-szám
  ↳ concentrationRangestringKoncentráció-tartomány
safetyInformation 🌐objectBiztonsági információ — Kezelési, tárolási és vészhelyzeti tudnivalók — nyelvenként egy-egy szöveg.
dueDiligenceUrl 🔒stringEllátási lánc átvilágítási jelentés (URL) — A rendelet szerinti due diligence (átvilágítási) szabályzat/jelentés linkje. Jogos érdekű felek hozzáférési szint (Art. 77(4)) — nem publikus. Opcionális.
endOfLifeobjectÉletciklus vége — Gyűjtés, újrahasznosítás, szétszerelés — nyelvenként kitöltve.
  ↳ recyclingInstructions 🌐objectGyűjtés / újrahasznosítás — Hová vihető vissza, hogyan hasznosítható újra — nyelvenként.
  ↳ disposalInstructions 🌐objectÁrtalmatlanítás / figyelmeztetés — Tilalmak, veszélyek — nyelvenként.
complianceDocumentsarray[object]Megfelelőségi dokumentumok — Tanúsítványok, megfelelőségi és teszt-dokumentumok linkjei (opcionális). pl. CE, UN 38.3.
  ↳ typestringTípus
  ↳ urlstringURL

furniture Bútor20 mező

MezőTípusKöt.Leírás
productNamestringTerméknév — A termék neve, ahogy a vásárló a passporton látni fogja.
skustringSKU — Belső cikkszám / azonosító — a te rendszeredből.
brandNamestringMárkanév
gtinstringGTIN (opcionális) — A vonalkód száma (GTIN-8/12/13/14). Az ellenőrzőszámot a rendszer validálja. Ha nincs, hagyd üresen.
commodityCodestringÁrukód (CN/HS, opcionális) — Vám-/tarifális besorolás: Kombinált Nómenklatúra (CN, 8 számjegy) vagy HS-kód. Az EU DPP-regiszter kötelező metaadata a regisztrációkor — a szállítói/vámpapírokon szerepel.
economicOperatorobjectGazdasági szereplő
  ↳ rolestring (enum)Szerep — Ki teszi a terméket az EU-piacra és felel érte. A legtöbb gyártónál: Gyártó. (manufacturer · importer · authorized_representative · distributor · dealer · fulfilment_service_provider)
  ↳ legalNamestringJogi név
  ↳ addressstringCím
  ↳ countrystringOrszág (ISO 3166-1 alpha-2) — Kétbetűs ISO országkód, nagybetűvel — pl. HU, DE, IT
  ↳ contactEmailstringKapcsolati e-mail — Ide fordulhat a vásárló vagy a hatóság.
  ↳ operatorIdstringEgyedi szereplő-azonosító (GS1 GLN) — 13 jegyű GS1 GLN — EU DPP egyedi gazdasági szereplő-azonosító. Ha nincs, hagyd üresen.
  ↳ eori 🔒stringEORI-szám — A gazdasági szereplő EORI-száma (vám / EU DPP-nyilvántartási azonosító) — a registry ez alapján azonosít. Csak hatósági hozzáférési szinten látszik. Ha nincs, hagyd üresen.
languagesarray[string]Nyelvek (BCP-47) — Mely nyelveken jelenjen meg a passport. A lokalizált mezőket (ápolás, összeszerelés, életciklus) minden itt felsorolt nyelven ki kell tölteni. pl. hu, en
materialCompositionarray[object]Anyag-összetétel — Miből készült a bútor. A százalékok összege pontosan 100 legyen. pl. tömör tölgy 80 + fém 20
  ↳ materialstring (enum)Anyag (wood · engineeredWood · metal · plastic · glass · textile · foam · leather …)
  ↳ percentagenumberSzázalék
woodCertificationobjectFa származása és tanúsítás — A felhasznált fa fenntartható származása és tanúsítása, ha releváns (opcionális).
  ↳ schemestring (enum)Tanúsítási rendszer — A fa fenntartható erdőgazdálkodási tanúsítása. (fsc · pefc · none)
  ↳ countrystringSzármazási ország (ISO) — A fa származási országa. Kétbetűs ISO kód, pl. AT, SE, RO. Opcionális.
dimensionsobjectMéretek és tömeg — A bútor befoglaló méretei és tömege (opcionális).
  ↳ widthnumberSzélesség (cm)
  ↳ depthnumberMélység (cm)
  ↳ heightnumberMagasság (cm)
  ↳ weightKgnumberTömeg (kg)
countryOfManufacturestringGyártás országa (ISO) — Ahol a végtermék készült. Kétbetűs ISO kód, pl. PL, RO, HU
careInstructions 🌐objectÁpolási útmutató — Tisztítás, ápolás, felület-karbantartás — nyelvenként egy-egy szöveg.
assemblyInstructions 🌐objectÖsszeszerelési útmutató — Hogyan szerelhető össze a bútor — nyelvenként (opcionális). Link is megadható.
repairobjectJavíthatóság — Javítható-e, és hogyan. A „javítható” és „alkatrész elérhető” mezők kötelezőek.
  ↳ repairablebooleanJavítható
  ↳ instructions 🌐objectJavítási útmutató — Hogyan javítható — nyelvenként (opcionális).
  ↳ sparePartsAvailablebooleanAlkatrész elérhető (pl. vasalat, láb)
  ↳ sparePartsUrlstringAlkatrész-rendelés (URL) — Hol rendelhetők pótalkatrészek (opcionális).
warrantyMonthsnumberGarancia (hónap) — A gyártói garancia időtartama hónapban. Opcionális.
substancesOfConcernarray[object]Aggályos anyagok — Aggályos anyagok (pl. REACH SVHC / SCIP), ha a termékben jelen vannak. A legtöbb terméknél üresen hagyható.
  ↳ namestringMegnevezés
  ↳ casNumberstringCAS-szám
  ↳ notestringMegjegyzés
flameRetardantsstring (enum)Égésgátló anyagok — Tartalmaz-e a termék (különösen a kárpit / hab) égésgátló vegyi anyagokat. Opcionális. (present · absent · unknown)
complianceDocumentsarray[object]Megfelelőségi dokumentumok — Tanúsítványok, megfelelőségi dokumentumok linkjei (opcionális). pl. EN 12520, EN 1728, tűzvédelmi tanúsítvány.
  ↳ typestringTípus
  ↳ urlstringURL
packagingstring (enum)Csomagolás újrahasznosíthatósága — A termék csomagolásának újrahasznosíthatósága. Opcionális. (recyclable · partiallyRecyclable · notRecyclable)
endOfLifeobjectÉletciklus vége — Mi legyen a bútorral a használat után — nyelvenként kitöltve.
  ↳ recyclingInstructions 🌐objectÚjrahasznosítási útmutató — Hogyan bontható szét és hasznosítható újra — nyelvenként.
  ↳ disposalInstructions 🌐objectÁrtalmatlanítási útmutató — Ha nem újrahasznosítható — nyelvenként.

Nyelvek

A languages (pl. ["hu","en"]) deklarálja, mely nyelveken van szabad-szöveges tartalom. A lokalizált mezőket (ápolás, életciklus… — a /schema-ban "localized": true) csak az első (elsődleges) nyelven kötelező kitölteni; a többi opcionális, hiánynál egy elérhető nyelvre esik vissza. A passport UI-címkéi ettől függetlenül automatikusan 24 nyelvre fordulnak.

Példák

Termék létrehozása

curl -X POST https://veridyn.eu/api/v1/products \
  -H "Authorization: Bearer vk_<kulcs>" \
  -H "Content-Type: application/json" \
  -d '{
    "category": "textile",
    "data": {
      "productName": "Bio pamut póló",
      "sku": "TEE-001",
      "brandName": "Lumora",
      "languages": ["hu","en"],
      "fiberComposition": [{"fiber":"pamut","percentage":100}],
      "countryOfManufacture": "PT",
      "careInstructions": {"hu":"Mosás 30 °C","en":"Wash at 30 °C"},
      "repair": {"repairable": true, "sparePartsAvailable": false},
      "endOfLife": {
        "recyclingInstructions": {"hu":"Textilgyűjtő","en":"Textile bin"},
        "disposalInstructions": {"hu":"Ne a kukába","en":"Not household waste"}
      },
      "economicOperator": {
        "role":"manufacturer","legalName":"Lumora Kft.","address":"Budapest",
        "country":"HU","contactEmail":"[email protected]"
      }
    }
  }'

Válasz (201):

{
  "data": {
    "id": "a1993ef7-7562-43bb-92ff-eb63f02dcde9",
    "category": "textile",
    "status": "active",
    "version_no": 1,
    "passport_url": "https://veridyn.eu/<fiók>/p/a1993ef7-…",
    "qr_url": "https://veridyn.eu/api/v1/products/a1993ef7-…/qr",
    "data": { "productName": "Bio pamut póló", … }
  }
}

Listázás

curl https://veridyn.eu/api/v1/products?limit=25 \
  -H "Authorization: Bearer vk_<kulcs>"

Egy termék lekérése

curl https://veridyn.eu/api/v1/products/{id} \
  -H "Authorization: Bearer vk_<kulcs>"

Frissítés (új verzió)

curl -X PATCH https://veridyn.eu/api/v1/products/{id} \
  -H "Authorization: Bearer vk_<kulcs>" \
  -H "Content-Type: application/json" \
  -d '{"data": {"recycledContentPercentage": 30}}'

A megadott mezők ráolvasnak a meglévő adatra (részleges frissítés), majd validálunk, és új, megőrzött verzió jön létre — a teljes változás-történet megmarad.

Tétel és egység útlevél (szerializálás)

Egy modell alá tétel- vagy egyed-útlevelet készítesz; a gyerek örökli a szülő adatait — csak a példány-specifikus mezőket (lot/serial) adod meg. Egyszerre több is (items[], max 500), a válasz soronként jelzi a sikert/hibát.

curl -X POST https://veridyn.eu/api/v1/products/{id}/children \
  -H "Authorization: Bearer vk_<kulcs>" \
  -H "Content-Type: application/json" \
  -d '{"level":"item","items":[{"serial":"SN-0001"},{"serial":"SN-0002"}]}'

Beolvasás-analitika (scan)

A QR-beolvasások összesített statisztikája — termékenként vagy az egész fiókra —, országra és eszközre bontva. Adatvédelem: nyers IP nincs, az egyedi látogató anonim hash-becslés.

curl "https://veridyn.eu/api/v1/products/{id}/scans?days=30" \
  -H "Authorization: Bearer vk_<kulcs>"
{
  "data": {
    "product_id": "a1993ef7-…",
    "range_days": 30,
    "total": 189, "unique": 142,
    "byCountry": { "HU": 142, "DE": 38, "AT": 9 },
    "byDevice":  { "mobile": 168, "tablet": 9, "desktop": 12 }
  }
}

Válasz & hibák

Siker: a hasznos adat a data kulcs alatt. Hiba esetén:

{ "error": "Érvénytelen adatok.", "code": "validation", "errors": [ … ] }
HTTPcodeJelentés
401unauthorizedHiányzó/érvénytelen API-kulcs.
403plan_requiredAz API a Pro csomagtól érhető el (a nyílt béta alatt minden béta-fiók használhatja).
404not_foundNincs ilyen termék / útvonal.
409gtin_takenA GTIN már foglalt.
403plan_limitElérted a szint keretét (csomag + extra). Tömeges hívásnál a túllógó elemek errors-ba kerülnek.
422validationÉrvénytelen adat (részletek az errors-ban).

Webhookok

A Beállítások → Webhookok alatt regisztrálsz egy HTTPS URL-t. Amikor egy termékútlevél létrejön / frissül / archiválódik, a Veridyn egy aláírt JSON-t POST-ol arra az URL-re — így a rendszered valós időben értesül, kérdezgetés nélkül.

Események

product.created · product.updated · product.archived · product.restored · scan.milestone · scan.clone_suspected

A scan.milestone akkor jön, amikor egy termékútlevél beolvasás-száma átlép egy mérföldkövet (10, 50, 100, 250, 500, 1000, …) — pl. „az útleveledet 1000-szer nyitották meg". Adata: { product_id, count, milestone }.

A scan.clone_suspected lehetséges hamisítást jelez: egy egyedi (sorszámos) útlevelet szokatlanul sokszor és sok különböző országból/eszközről olvastak be — ez másolt QR-kódra utalhat. Adata: { product_id, count, countries, unique_devices }.

Kézbesítés

POST https://your-system.example/veridyn-webhook
Content-Type: application/json
X-Veridyn-Event: product.updated
X-Veridyn-Signature: sha256=<hmac>

{
  "event": "product.updated",
  "data": { "id": "a1993ef7-…", "category": "textile", "version_no": 2 },
  "sent_at": "2026-07-02T13:19:11+00:00"
}

Aláírás-ellenőrzés

Az X-Veridyn-Signature a nyers törzs HMAC-SHA256 aláírása a webhook secret-jével (a Beállításokban látod). Így ellenőrzöd — pl. PHP-ban:

$body = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $body, $secret);
if (!hash_equals($expected, $_SERVER['HTTP_X_VERIDYN_SIGNATURE'] ?? '')) {
    http_response_code(401); exit; // érvénytelen aláírás}

Válaszolj 2xx státusszal. Ha a kézbesítés sikertelen (nem 2xx / időtúllépés), automatikusan újrapróbáljuk exponenciális backoff-fal (kb. 1 perc → 5 perc → 30 perc → 2 óra → 6 óra, max 6 próbálkozás), tartós hiba esetén feladjuk. Az utolsó kézbesítés státusza a Beállításokban látszik.

💡 A kategória-sémák (mely mezők kötelezők/opcionálisak) a termékűrlapon és a /schema/{category} végponton látszanak. Jelenleg elérhető: textile, battery és furniture. A séma bővül, ahogy az EU véglegesíti a kategóriákat.

← Beállítások / API-kulcsok